%读入图像
bw=imread('a.jpg');
bw=rgb2gray(bw);
[m,n]=size(bw);
for i=1:m
forj=1:n
if(bw(i,j)>70)
bw(i,j)=0;
else
% bw(i,j) =mod( mod(bw(i,j),20),10);
bw(i,j) =mod(bw(i,j),10);
end
end
end;
% imshow(bw);
%输出图像
file=fopen('a.txt','w');
for i=1:m
forj=1:n
if(bw(i,j)>0)
fprintf(file,'%d',bw(i,j));
else
fprintf(file,' ');
end
end
fprintf(file,'\n');
end;
fclose(file);
简单的将图像转化成灰度图像 然后筛掉一些背景 剩下像素mod10 显示,对于区分度大的图片做出来的效果还是比较好的,至于区分度小的 这样做就不适合了
最后在notepad上打开 然后缩小到最小 就可以查看整体效果了
上面代码是我之前做的版本,之后我又做了改进bw=imread('./图片/g.jpg');
bw=rgb2gray(bw);
[m,n]=size(bw);
round =10;
for i=1:m
for j=1:n
bw(i,j) = bw(i,j)+round/2-mod(bw(i,j)+round/2,round);
end
end
% for i=1:m
% for j=1:n
% if(bw(i,j)>135)
% bw(i,j)=0;
% else
% % bw(i,j) =mod( mod(bw(i,j),20),10);
% % bw(i,j)=mod( bw(i,j),10);
% bw(i,j) =mod(bw(i,j)/10,10);
% end
% end
% end;
% imshow(bw);
file=fopen('./txt/g.txt','w');
for i=1:m
for j=1:n
fprintf(file,'%c',to_text(bw(i,j)));
% if(bw(i,j)>0)
% fprintf(file,'%d',bw(i,j));
% else
% fprintf(file,' ');
% end
end
fprintf(file,'\n');
end;
fclose(file);
接下来是to_text函数
function [s] = to_text( g )
charactersARRAY = 'M80V1;:*-. ';
count = size(charactersARRAY);
count=uint8(count(2));
span =uint8(255 / count);
cidx =uint8( g / span);
if cidx > count-1
cidx = count- 1;
end;
s=charactersARRAY(cidx+1);
程序的思路是处理一下初始点,然后对剩下的点做处理
这里处理初始点的方法与多种,根据我需处理的图像的条件,我选择的方案是对齐,
之后是转化,用查表的方式将对应灰度值幻化成字符,这个字符表是经验总结出来的 画出来的效果也比较好