本程序可以实现图像中数字的识别。诸如身份证号,驾驶证号,银行卡号等。
主要关键点就是图像分割。如何将证件号图中每个数字完整的裁剪出来是个难题,此处用粗定位和精确定位配合来完成裁剪。效果较好。
这里将待识别的数字和10个数字库模板图(0-9)做相关性计算,将计算结果最大的数字认定为识别结果。这样就实现了从图像到数字的转化。MATLAB封装好了相关性计算函数和众多图像数据处理函数,只需要调用即可。这就是MATLAB的强大之处——封装复杂的数学运算。
最后将待显示的信息放到EXCEL中,用识别结果来比对寻找对应的信息,进行显示,从而实现显示识别效果。
实际运行效果如下:
插入一段代码:
%%%%精确定位列边界%%%%
sx=sum(result);JL=1;JR=1;
for i=1:2:R-3
if sx(i)==L&&sx(i+2)<L
JL=i;break;
end
end
for i=R-3:-1:3
if sx(i)==L&&sx(i-2)<L
JR=i; break;
end
end
%%%%精确定位行边界%%%%
ex=sum(result,2);JU=1;JD=1;
for i=1:1:L-3
if ex(i)==R&&ex(i+2)<R*0.9
JU=i;break;
end
end
for i=L-3:-1:3
if ex(i)==R&&ex(i-2)<R*0.9
JD=i; break;
end
end
result=result(JU:JD,JL:JR);
nextresult=imresize(result,5,'bilinea');%%%一种差值放大图片的算法,放大5倍
/
+VX:w15136355113 //完整m文件,报价100RMB,保教保会。
///
for m_18=1:JD
p=nextresult(1:m,left(m_18):right(m_18));%%%%分割图中每个数字
for n_10=1:10
q=imread(strcat('1\',int2str(n_10),'.jpg'));%%%链接字符串,批量读取数字模板图片
q = im2bw(q); %将读取到的图片二值化(此处截屏的得到的模板图片是jpg格式,读取后是uint8)
q=imresize(q,size(p));%%%将模板放大到和待识别图同样尺寸
matchrs(n_10)=corr2(p,q);%%%%%%%%%%矩阵相关性计算
end
[~,k]=max(matchrs); %%%%%%%%%%将最相关的图片转换成数字
lastresult=strcat(lastresult, fonts(k)); %%%%输出语句字符拼接
end
///
+VX:w15136355113 //完整m文件,报价100RMB,保教保会。
/
将待显示的信息,存放到excel表格中,配和读取实现类似数据库的功能。
程序的后面还有一些结合excel读取的逻辑部分,比较简单就不在此赘述。
欢迎在评论区发言,一起学习,一起进步趴!