使用 c++ 將圖像轉(zhuǎn)換為 ASCII 藝術(shù)
什么是 Ascii 藝術(shù)?
ASCII藝術(shù)是一種圖形設(shè)計(jì)技術(shù),使用計(jì)算機(jī)進(jìn)行演示,由1963年ASCII標(biāo)準(zhǔn)定義的95個可打印字符(總共128個)和ASCII兼容字符集(超過標(biāo)準(zhǔn)7位ASCII的128個字符)拼湊而成。該術(shù)語也被廣泛用于指代基于文本的視覺藝術(shù)。
先決條件
· 安裝和配置OpenCV 庫
· CMake 已安裝和配置CMake
創(chuàng)建CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(image_to_ascii VERSION 0.1.0)
include(CTest)
enable_testing()
find_package(OpenCV REQUIRED)
include_directories((${OpenCV_INCLUDE_DIRS}))
add_executable(image_to_ascii main.cpp)
target_link_libraries(image_to_ascii ${OpenCV_LIBS})
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
創(chuàng)建一個main.cpp,包含所有必要導(dǎo)入的文件
#include <iostream>
#include <o(jì)pencv2/opencv.hpp>
#include <o(jì)pencv2/imgproc/imgproc.hpp>
#include <math.h>
int main(int, char **)
{
return 0;
}
使用 opencv 的imread方法讀取圖像,該方法返回一個Mat對象。
Mat 類表示一個 n 維密集數(shù)值單通道(灰度圖像)或多通道(彩色圖像)數(shù)組
cv::Mat image = cv::imread("pikachu.jpg");
將圖像轉(zhuǎn)換為灰度圖像
彩色圖像到灰度圖像
cv::Mat grayImage;
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
聲明并實(shí)現(xiàn)獲取灰度圖像像素平方平均值的calculateAvg函數(shù)
int calculateAvg(cv::Mat image, int row, int col, int scale)
{
int sum = 0;
int pixelCount = 0;
int r = row, c = col;
while (r <= row + scale && r < image.rows)
{
while (c <= col + scale && c < image.cols)
{
sum += (int)image.a(chǎn)t<uchar>(r, c);
pixelCount++;
c++;
}
r++;
}
return sum / pixelCount;
}
聲明 ascii 代表的灰度值
std::string gscale = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ";
在 scale x scale 組中遍歷圖像的像素,并將 scale x scale 像素方形轉(zhuǎn)換為1個ascii字符
int scale = 4;
for (int i = 0; i < grayImage.rows; i += scale)
{
std::string text = "";
for (int j = 0; j < grayImage.cols; j += scale)
{
// gray color in range (0, 255)
int pixel = calculateAvg(grayImage, i, j, scale);
// 2 ascii character will match 1 pixel, because 1 ascii character height match 2 ascii character width
// so 2 ascii character will be a square
text += gscale[ceil((gscale.length() - 1) * pixel / 255)];
text += gscale[ceil((gscale.length() - 1) * pixel / 255)];
}
std::cout << text << std::endl;
}
現(xiàn)在,如果你構(gòu)建 CMake 項(xiàng)目并運(yùn)行該程序,它應(yīng)該轉(zhuǎn)換你的輸入圖像并在控制臺中打印 ascii 藝術(shù)圖像。
原文標(biāo)題 : 使用 c++ 將圖像轉(zhuǎn)換為 ASCII 藝術(shù)

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
6月20日立即下載>> 【白皮書】精準(zhǔn)測量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動力電池技術(shù)應(yīng)用大會
-
免費(fèi)參會立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會工業(yè)芯片與傳感儀表展
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報(bào)告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過于簡單
- 10 “搶灘”家用機(jī)器人領(lǐng)域,聯(lián)通、海爾、美的等紛紛入局