生成酷炫注释(根据图片生成)

预览

生成酷炫注释(根据图片生成)_第1张图片

一般算法的网络赛结束后都可以查看别人的代码,然后就看到了各种酷炫*炸天的注释,博主实在是羡慕,于是就动手写了一个。原理特别简单,就是用opencv读取图片,转成灰度图,只含有一个通道,然后把0-255对应到可打印字符上,然后一个像素一个像素处理。由于是单像素采集,所以最后生成的文字多少就取决你的图片像素,太大了的话做注释效果不太好,也可以每四个像素取一个平均值,生成一个字符,这样横竖就缩小了一倍,也可以根据自己的需求自行调整。黑白,清晰的图片效果更好。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include 
#include
#include
#include
#include
using namespace std;
using namespace cv;

char Book[] = " $@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.";

char Chang(int gray) {
if(gray>240) return ' ';
int unit = 255.0 / strlen(Book);
return Book[int(gray / unit)];
//return int(gray / unit)? '0':'1';
//return rand()%2? '$':'%';
}

int main()
{
char name[] = "timg.jpg";
char name2[] = "timg.txt";
IplImage *a = cvLoadImage(name,0);
ofstream Txtout(name2);
for (int i = 0; i < a->height; i++) {
for (int j = 0; j < a->width; j++) {
CvScalar s = cvGet2D(a, i, j);
Txtout << Chang(s.val[0]);
printf_s("%c",Chang(s.val[0]));
}
Txtout << endl;
cout << endl;
}
Txtout.close();

return 0;
}

你可能感兴趣的:(生成酷炫注释(根据图片生成))