使用 c++ 將圖像轉(zhuǎn)換為 ASCII 藝術(shù)
什么是 Ascii 藝術(shù)?
ASCII藝術(shù)是一種圖形設(shè)計(jì)技術(shù),使用計(jì)算機(jī)進(jìn)行演示,由1963年ASCII標(biāo)準(zhǔn)定義的95個(gè)可打印字符(總共128個(gè))和ASCII兼容字符集(超過(guò)標(biāo)準(zhǔn)7位ASCII的128個(gè)字符)拼湊而成。該術(shù)語(yǔ)也被廣泛用于指代基于文本的視覺(jué)藝術(shù)。
先決條件
· 安裝和配置OpenCV 庫(kù)
· 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)建一個(gè)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方法讀取圖像,該方法返回一個(gè)Mat對(duì)象。
Mat 類表示一個(gè) 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個(gè)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)換你的輸入圖像并在控制臺(tái)中打印 ascii 藝術(shù)圖像。
原文標(biāo)題 : 使用 c++ 將圖像轉(zhuǎn)換為 ASCII 藝術(shù)
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-12.26立即報(bào)名>>> 【在線會(huì)議】村田用于AR/VR設(shè)計(jì)開(kāi)發(fā)解決方案
-
1月8日火熱報(bào)名中>> Allegro助力汽車(chē)電氣化和底盤(pán)解決方案優(yōu)化在線研討會(huì)
-
即日-1.14火熱報(bào)名中>> OFweek2025中國(guó)智造CIO在線峰會(huì)
-
即日-1.24立即參與>>> 【限時(shí)免費(fèi)】安森美:Treo 平臺(tái)帶來(lái)出色的精密模擬
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
精彩回顧立即查看>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 人形機(jī)器人核心零部件,誰(shuí)是盈利最強(qiáng)企業(yè)?
- 2 AI Agent現(xiàn)狀如何?聊聊近期國(guó)內(nèi)的智能體市場(chǎng)動(dòng)向
- 3 5nm重大突破,研祥智能助力半導(dǎo)體企業(yè)高效發(fā)展!
- 4 人形機(jī)器人引爆“PEEK材料”!概念股梳理(名單)
- 5 馬云沒(méi)回牌桌,但重注全壓在了
- 6 蘋(píng)果或?qū)渴肿止?jié)騰訊大模型,我國(guó)大模型產(chǎn)業(yè)發(fā)展駛?cè)肟燔?chē)道
- 7 豆包AI登頂國(guó)內(nèi)第一!概念股梳理(名單)
- 8 押注AI王者歸來(lái),歌爾股份“智能體”在下一盤(pán)“大棋”
- 9 AI超級(jí)應(yīng)用什么時(shí)候才能出現(xiàn)?
- 10 英偉達(dá)迎來(lái)當(dāng)頭一棒
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市