|
发表于 2012-9-5 21:13:11
|
显示全部楼层
这是我以前捣鼓的时候写的一段代码,用的matlab语言,不是很完善,也不适用于所有的12864,楼主有兴趣可以看一看
s3=strcat('E:\ARM\STM32\截图\ba00',s2,'.bmp') % 这一段读取了一帧保存在自己指定目录里的图片,我截图时取的名字都叫“ba00001.bmp"、“ba00123.bmp"之类的,
I=imread(s3) % 所以这里用'ba00‘和 s2 和'.bmp'三个字符串连接起来构成文件名,其中s2再循环中不断加一,遍历全部图片文件.
t=graythresh(I) % 这一段获取图片全局灰度阈值,来作为之后二值化时的判决阈值,即每一像素相对灰度高于这个值就判为1,反之为0,
% 很多现有取模软件无法自由设置取模时的灰度阈值,所以取模结果会丢失很多细节,比如一些较浅的阴影和残影,这也是我决定自己写程序取模的原因
I1=im2bw(I,t/4) % 这一段就是二值化喽,把RGB图像转成0,1图,t/4是我自己试出来的经验值,感觉看着比较舒服,另外其实完全可以把这个值定死,直接设成0.1左右,
%这样就可以省掉上一句(效果没啥区别)
for i=1:1:8
for j=1:1:128
date=~I1(i*8,j)*128+~I1(i*8-1,j)*64+~I1(i*8-2,j)*32+~I1(i*8-3,j)*16+~I1(i*8-4,j)*8+~I1(i*8-5,j)*4+~I1(i*8-6,j)*2+~I1(i*8-7,j); % 这里把二值图矩阵的元素每8个组成一个十进制数
%按什么原则玩过12864的朋友应该都很清楚了,
%至于为什么每个位都要取反是因为灰度值越小
%像素点越白,所以按上一句中取的二值图如果
%直接显示在12864上会成为反色图,所以取反就好了
fwrite(f,date,'uint8') %写进文件,一次写8位 |
|