├── .gitattributes ├── ReadMe.md ├── imagetransformer.cpp ├── imagetransformer.h ├── main.cpp └── openCV_Ascii.pro /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /ReadMe.md: -------------------------------------------------------------------------------- 1 | ## 把图片或视频转为字符画面输出到控制台 2 | ![loadingImage...](https://github.com/Saber2pr/MyWeb/blob/master/resource/badapple_src.jpg) 3 | ![loadingImage...](https://github.com/Saber2pr/MyWeb/blob/master/resource/badapple.jpg) 4 | * 你需要配置C/C++和openCV环境 5 | * openCV_Ascii.pro文件为qtcreator配置opencv的文件,你可以不考虑。 6 | > imagetransformer.h& ~.cpp包括了主要的静态接口。 7 | > main.cpp为示例。 8 | -------------------------------------------------------------------------------- /imagetransformer.cpp: -------------------------------------------------------------------------------- 1 | #include "imagetransformer.h" 2 | 3 | ImageTransformer::ImageTransformer() 4 | { 5 | } 6 | 7 | bool ImageTransformer::convertMatToAlphabetic(Mat image) 8 | { 9 | //字符画数组 10 | unsigned char codeLib[4] = {' ','#','$','^'}; 11 | //拼接字符串 12 | string string_Frame = ""; 13 | 14 | if(image.empty()) 15 | {//读取失败 16 | cout<<"check the frame of video >>> "<(i,j) / 225;//判断当前位置像素点灰度值 39 | string_Frame += codeLib[percent * sizeof(codeLib)];//拼接字符 40 | } 41 | string_Frame += "\n"; 42 | } 43 | //输出帧字符串 44 | cout << string_Frame << endl; 45 | 46 | return true; 47 | } 48 | 49 | bool ImageTransformer::convertMatToAlphabetic(std::string imagePath) 50 | { 51 | //字符画数组 52 | unsigned char codeLib[4] = {' ','#','$','^'}; 53 | //拼接字符串 54 | string string_Frame = ""; 55 | 56 | Mat image = imread(imagePath); 57 | if(image.empty()) 58 | {//读取失败 59 | cout<<"check the frame of video >>> "<(i,j) / 225;//判断当前位置像素点灰度值 81 | string_Frame += codeLib[percent * sizeof(codeLib)];//拼接字符 82 | } 83 | string_Frame += "\n"; 84 | } 85 | //输出帧字符串 86 | cout << string_Frame << endl; 87 | 88 | return true; 89 | } 90 | 91 | bool ImageTransformer::convertMatToGrayLoadToLocal(string imagePath, string loadPath) 92 | { 93 | Mat image = imread(imagePath);//读取原图 94 | if(image.empty()) 95 | {//读取失败 96 | cout<<"check the path of photo >>> "<>> " << endl; 140 | break; 141 | } 142 | 143 | imshow("Movie Player",frame); 144 | 145 | char c = waitKey(33);//帧率控制 146 | if(c == 27){ //判断按键值 147 | break; 148 | } 149 | 150 | } 151 | 152 | capture.release(); 153 | destroyWindow("Movie Player"); 154 | } 155 | 156 | bool ImageTransformer::convertVideoToAlphabetic(std::string videoPath) 157 | { 158 | VideoCapture video(videoPath); 159 | if(!video.isOpened()) 160 | { 161 | cout << "loading video failed >>> "<< endl; 162 | } 163 | 164 | Mat frame; 165 | while (true) 166 | { 167 | if(!video.read(frame)){ 168 | cout << "readVideoFrameError >>> " << endl; 169 | break; 170 | } 171 | 172 | ImageTransformer::convertMatToAlphabetic(frame); 173 | char c = waitKey(60);//帧率控制 174 | if(c == 27){ 175 | break; 176 | } 177 | } 178 | 179 | video.release(); 180 | return true; 181 | } 182 | -------------------------------------------------------------------------------- /imagetransformer.h: -------------------------------------------------------------------------------- 1 | /********************************************************* 2 | * PrprSaber(AK-12)(bilibili妥苪朵And露)_1029985799@qq.com 3 | * 2018年8月25日15:42:10 4 | * 图片视频转换字符画(ImageTransformer) 5 | * 需要opencv环境 6 | * 7 | * 输出效果可能需要结合文本域大小调试 8 | * (详见:ImageTransformer::convertMatToAlphabetic:line15) 9 | * 10 | */ 11 | 12 | #ifndef IMAGETRANSFORMER_H 13 | #define IMAGETRANSFORMER_H 14 | 15 | #include 16 | #include //文件流 17 | #include //opencv库 18 | #include 19 | 20 | using namespace std; 21 | using namespace cv; 22 | 23 | class ImageTransformer 24 | { 25 | public: 26 | ImageTransformer(); 27 | 28 | public: 29 | /*** 30 | * 把Mat图片变量转换成字符输出到控制台。 31 | * 输入图片变量。 32 | */ 33 | static bool convertMatToAlphabetic(Mat image); 34 | 35 | /*** 36 | * 把图片转换成字符输出到控制台。 37 | * 输入图片路径,使用“\\”。 38 | */ 39 | static bool convertMatToAlphabetic(std::string imagePath); 40 | 41 | /*** 42 | * 把图片转换成灰度图输出到本地保存。 43 | * 输入原图路径和保存路径,,使用“\\”。 44 | */ 45 | static bool convertMatToGrayLoadToLocal(std::string imagePath, std::string loadPath); 46 | 47 | /** 48 | * 播放视频 49 | * 输入视频路径,使用“\\”。 50 | */ 51 | static void videoPlayer(std::string videoPath); 52 | 53 | /** 54 | * 视频转字符 55 | * 输入视频路径,使用“\\”。 56 | */ 57 | static bool convertVideoToAlphabetic(std::string videoPath); 58 | 59 | }; 60 | 61 | #endif // IMAGETRANSFORMER_H 62 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | /********************************************************* 2 | * PrprSaber(AK-12)(bilibili妥苪朵And露)_1029985799@qq.com 3 | * 2018年8月25日15:42:10 4 | * 所有路径,需使用“\\”分隔。 5 | */ 6 | 7 | #include"imagetransformer.h" 8 | #include 9 | 10 | 11 | //图片文件路径 12 | //#define imageFile "F:\\Test\\opencvTest\\cpp\\test_147.jpg" 13 | //灰度图保存路径 14 | //#define imageFile_gray "F:\\Test\\opencvTest\\cpp\\image_gray.jpg" 15 | 16 | //视频文件路径 17 | #define videoFile "F:\\Test\\opencvTest\\cpp\\badapple.mp4" 18 | 19 | /** 20 | * 示例: 21 | */ 22 | int main() 23 | { 24 | // /** 25 | // * 读取图片转成字符画 26 | // */ 27 | // ImageTransformer::convertMatToAlphabetic(imageFile); 28 | // /** 29 | // * 读取图片转成灰度图 30 | // */ 31 | // ImageTransformer::convertMatToGrayLoadToLocal(imageFile, imageFile_gray); 32 | 33 | /** 34 | * 读取视频转成字符画 35 | */ 36 | ImageTransformer::convertVideoToAlphabetic(videoFile); 37 | 38 | // /** 39 | // * 视频播放器 40 | // */ 41 | // ImageTransformer::videoPlayer(videoFile); 42 | 43 | return 0;//程序终止 44 | 45 | } 46 | -------------------------------------------------------------------------------- /openCV_Ascii.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2018-08-04T23:28:59 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui 8 | 9 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 10 | 11 | TARGET = openCvTest1 12 | TEMPLATE = app 13 | 14 | 15 | SOURCES += main.cpp \ 16 | imagetransformer.cpp 17 | 18 | HEADERS += \ 19 | imagetransformer.h 20 | 21 | FORMS += 22 | 23 | INCLUDEPATH += D://openCV//opencv//build//include//opencv2 \ 24 | D://openCV//opencv//build//include//opencv \ 25 | D://openCV//opencv//build//include 26 | 27 | LIBS += D://openCV//opencv//build//x64//vc14//lib//*.lib 28 | 29 | 30 | --------------------------------------------------------------------------------