概述
最近在用matlab做关于车牌识别,遇见了一个这样的需求
做完二值化处理后,我们想进行分割,然后把每一块长宽调整到位,用最小外接矩形框起来,那么就有一个这样的问题
我可以把每一块叫做im_1,im_2,如果你不嫌麻烦,可以写8次重复的代码,所以我们希望通过8次循环,那么再循环里怎么访问我们的im_1,im_2呢,这个是一个比较麻烦的事情,所以这里我就有一个不错的思路
我们可以利用eval这个函数,具体怎么操作呢,请看代码
x1=1;%保存每个字符最左侧的值
x2=1;%保存每个字符最右侧的值
for n=1:8%因为一共有8块区域,其中有7块是我们需要的
%首先在列方向上进行提取,也就是说,把字符的宽度缩小,这样才可以之后对具体的每个字符高度进行处理
im_gray_sum=sum(im_gray,1);%在列方向上进行求和,相当于变成了一个1X宽度的矩阵
for i=x1:size(im_gray_sum,2)-1
if(im_gray_sum(i)==0&im_gray_sum(i+1)~=0)
x1=i+1;
break;
end
end
for i=x2+1:size(im_gray_sum,2)-1
if (im_gray_sum(i)~=0&im_gray_sum(i+1)==0)
x2=i;
break;
end
end
im=im_gray(:,x1:x2);%进行切片,接下来再高度上进行提取
im_gray_sum=sum(im,2);
x3=1;
for i=1:size(im,1)-1
if(im_gray_sum(1)==0&im_gray_sum(i)==0&im_gray_sum(i+1)~=0)
x3=i+1;
break
end
end
x4=size(im,1);
for i=size(im,1):-1:2
if (im_gray_sum(i)==0&im_gray_sum(i-1)~=0&im_gray_sum(size(im,1))==0)
x4=i-1;
break
end
end
b=['im_',num2str(n)];
eval([b,'=im(x3:x4,:)']);
end
其中最关键的就是
b=['im_',num2str(n)];
eval([b,'=im(x3:x4,:)']);
我们先再循环中把我们要得到的im_1,im_2处理好,不能先进行赋值再处理,一旦赋值之后,我们的im和im_1虽然他们值一样,但他们之间不是引用赋值,而是直接数值传递,我们改变im是无法改变im_1的,所以一定要在对im操作完之后再产生我们的im_1,im_2
最后查看效果吧
所以如果你也要一次处理多个变量,记住顺序就好
先处理,再进行赋值生成变量
如果在后面的另一个循环继续这样使用的话,也跟这个类似,只不过是在初始化的时候进行复制就好,类似下面
for n=1:8
im=eval(['im_',num2str(n)] );%把im复制成我们的im_1
%你的程序
b=['im_',num2str(n)];
eval([b,'=im(x3:x4,:)']);%最后再把运算得到的im结果赋值给im_1
end
最后
以上就是忧心身影为你收集整理的matlab循环处理多个变量的全部内容,希望文章能够帮你解决matlab循环处理多个变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复