最近在用matlab做关于车牌识别,遇见了一个这样的需求
做完二值化处理后,我们想进行分割,然后把每一块长宽调整到位,用最小外接矩形框起来,那么就有一个这样的问题
我可以把每一块叫做im_1,im_2,如果你不嫌麻烦,可以写8次重复的代码,所以我们希望通过8次循环,那么再循环里怎么访问我们的im_1,im_2呢,这个是一个比较麻烦的事情,所以这里我就有一个不错的思路
我们可以利用eval这个函数,具体怎么操作呢,请看代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37x1=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
其中最关键的就是
复制代码
1
2
3
4b=['im_',num2str(n)]; eval([b,'=im(x3:x4,:)']);
我们先再循环中把我们要得到的im_1,im_2处理好,不能先进行赋值再处理,一旦赋值之后,我们的im和im_1虽然他们值一样,但他们之间不是引用赋值,而是直接数值传递,我们改变im是无法改变im_1的,所以一定要在对im操作完之后再产生我们的im_1,im_2
最后查看效果吧
所以如果你也要一次处理多个变量,记住顺序就好
先处理,再进行赋值生成变量
如果在后面的另一个循环继续这样使用的话,也跟这个类似,只不过是在初始化的时候进行复制就好,类似下面
复制代码
1
2
3
4
5
6
7for 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循环处理多个变量内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复