本帖最后由 wx_taVNbhNT 于 2020-11-6 16:54 编辑
求问一下我需要读取一批图像,程序运行报错,我这是哪里出了问题?求大神解惑
附上程序:(版本R2020b)
clear
clc
%统一图片大小
y=28;
z=28;
%导入数据库各数字个数
geshu=11;
zongshu=geshu*2;
%导入数据库
u=[];
picSize=[y,z];
shang=1;xia=1;zuo=1;you=1;
%预处理数据库,要求图片黑底白色数字
for s=0:9
for t=0:geshu-1
q=im2double(imread(strcat('E:\MATLAB\',num2str(s),'_', num2str(t),'.jpg')));
q=im2bw(q,0.1);
[heng,zong]=size(q);
hs=sum(q);
hs0=sum(q,2); %这里表示行之和,这时应该是竖着写了两个数字及其以上,除了那种奇葩写得贼长那种
hs1=hs0'; %将行之和转置
while(hs1(xia)==0&&xia
xia=xia+1;
end
shang=xia;
while(hs1(shang)>0&&shang
shang=shang+1;
end
while(hs(zuo)==0&&zuo
zuo=zuo+1;
end
you=zuo;
while(hs(you)>0&&you
you=you+1;
end
q=q(xia:shang,zuo:you);
q=imresize(q,picSize);
u=[u,q];
shang=1;xia=1;zuo=1;you=1;
end
end
d=[];
%打开摄像头
obj = videoinput('winvideo',1,'MJPG_640x480');
h=preview(obj);
start(obj);
figure;
while ishandle(h)
frame = getsnapshot(obj); % 获取帧
%图像增强
% h=ones(5,5)/25; %过滤器h
% I=imfilter(I,h);%真彩色增强
% figure('name','真彩色增强');imshow(I);title('真彩色增强');
I1=rgb2gray(frame); % RGB图像转灰度图像
I1=imadjust(I1,[0.3,0.7],[]);
I1=medfilt2(I1);
% figure,imshow(I1);title('中值滤波');
%边缘检测:sobel,roberts,canny,prewitt等
I2=edge(I1,'roberts',0.25,'both'); %边缘检测算法,强度小于阈值0.15的边缘被省略掉,'both'两个方向检测(缺省默认)
% figure('name','边缘检测'),imshow(I2);title('robert算子边缘检测')
se=[1];
I3=imerode(I2,se);% 腐蚀Imerode(X,SE).其中X是待处理的图像,SE是结构元素对象
% figure('name','腐蚀后图像'),imshow(I3);title('腐蚀后的图像');
se=strel('rectangle',[30,30]);% 25X25的矩形 strel???
I4=imclose(I3,se);% 用25*25的矩形对图像进行闭运算(先膨胀后腐蚀)有平滑边界作用
% figure('name','平滑处理'),imshow(I4);title('平滑图像的轮廓');
I5=bwareaopen(I4,800);% 从二进制图像中移除所有少于2000像素的连接对象,消失的是连续的白色像素数量少于2000的字符
% figure('name','移除小对象'),imshow(I5);title('从对象中移除小对象');
%裁剪程序
[r,c]=find(I5);%找出I5中即只剩下数字的图里白元素所在行列,r记录行,c记录列
nextresult=I5(min(r) :max(r),min(c):max(c));
subplot(121),imshow(nextresult);title('抓取的数字图');
cj1=min(r) ;%记录裁剪尺寸
cj2=max(r);
cj3=min(c);
cj4=max(c);
[g,w]=size(nextresult);
[splitfs,points]=shuziqiege(nextresult,r,c,g,w);
xs=[splitfs,points];
dechushuzi=[];
jishu0=zeros(1,geshu);jishu1=ones(1,geshu);jishu2=ones(1,geshu)*2;jishu3=ones(1,geshu)*3;jishu4=ones(1,geshu)*4;jishu5=ones(1,geshu)*5;
jishu6=ones(1,geshu)*6;jishu7=ones(1,geshu)*7;jishu8=ones(1,geshu)*8;jishu9=ones(1,geshu)*9;
jishuqi=[jishu0,jishu1,jishu2,jishu3,jishu4,jishu5,jishu6,jishu7,jishu8,jishu9];
x=1;
for m_520=1:size(xs,2)-1
p=xs{m_520};
p=imresize(p,picSize);
for n_520=1:zongshu
nn=(n_520-1)*z+1;
ff=n_520*z;
d=u(1:y,nn:ff); %取识别库一张图所化为的矩阵
matchrs(n_520)=corr2(p,d);
end
[~,k]=max(matchrs);
dechushuzi(x)=jishuqi(k);
% lastresult=strcat(lastresult, fonts(k));
x=x+1;
end
x=1;
%开始标记
label_str = ['The number is: ' num2str(dechushuzi,'%d') ''];
cj5=cj2-cj1;
cj6=cj4-cj3;
cj=[cj3 cj1 cj6 cj5];
rgb = insertObjectAnnotation(frame, 'rectangle', cj, label_str,'textboxopacity', 0.9, 'fontsize', 18,'color','r');
subplot(122),imshow(rgb),title('数字识别系统');
drawnow
end
MATLAB错误指令.PNG
(22.82 KB, 下载次数: 0)
2020-11-6 16:41 上传