乘以一个整数后得到一个矩阵?

时间:2017-04-18 14:33:30

标签: arrays matlab if-statement

我从图像中提取了一个速度符号。 enter image description here

然后,我在matlab中使用ocr来检查右下角图像中的数字。答案是20.然后我把它添加到一个数组中。当数组为for (i=n; i<n*2; i++) arr3[i]=arr2[i-n]; 时,它应显示20。 但我无法检查disp(array),所以我开始ismember其他选项。当我尝试disp时,我得到的不是40,而是一个随机数disp(A*2)的数组。这是为什么?我怎样才能检查我原来从100 158 20 20获得的答案是否为20或者是if语句? 我的代码:

number=results.Text

编辑: 由于A是一个字符串,我试图这样做:

I = imread('p7.tif');
subplot(2,2,1);imshow(I);title('Original Image'); 
%sharpen edges
B = imsharpen(I);
subplot(2,2,2);imshow(B);title('sharpened edges');

%find circles
Img = im2bw(B(:,:,3));
minRad = 20;
maxRad = 90;
[centers, radii] = imfindcircles(Img, [minRad maxRad], ...
                                    'ObjectPolarity','bright','sensitivity',0.87);
imagesc(Img);
viscircles(centers, radii,'Color','green');

rect = [centers(1)-(radii - radii/3.5),centers(2)-(radii - radii/3.5),2*(radii-radii/3.5),2*(radii-radii/3.5)];
I2 = imcrop(I,rect);

subplot(2,2,3);imshow(I2);title('crop');
%to gray
gray = rgb2gray(I2);
Icorrected = imtophat(gray, strel('disk', 15));
black = im2bw(gray);
results = ocr(black);
number = results.Text;

A = number;
array = [];
array = [array,A];
disp(array)
%result is 20


disp(A)
%result is 20

disp(A*2)
%results is 100   158    20    20

subplot(2,2,4);imshow(black);title('crop');

但是tf = 0 我如何检查A是否为20?

2 个答案:

答案 0 :(得分:2)

根据ocr的文档,返回的是ocrText object,其Text属性为:

  

OCR识别的文本,指定为字符数组。文本包括空格和换行符。

将字符数组乘以数字数组会在乘法之前将字符数组转换为数字数组(通常是ASCII等效数组)。您可以通过以下方式看到:

>> disp('hi'*2)
   208   210

在您的情况下,您有'2O '而不是20,您可以使用&#34;随机&#34;阵列:

>> disp(char([100 158 20 20]/2))
2O

请注意,您已匹配O而非0,因此简单str2double在这种情况下不起作用。围绕这个有几个选择:

如果您知道自己只是在寻找数字,则可以指定'CharacterSet'ocr,这样就不会与字母匹配:

results = ocr(black, 'CharacterSet', '0123456789');
number = str2double(results.Text);

否则,你可以建立一个替换词典来交换他们的&#34;等价物的字符。&#34; MATLAB工具箱可能具有内置功能,但我对工具箱不熟悉,不知道副手。

答案 1 :(得分:0)

代码中的

Sub EnvTest() Dim S as String S = Environ("USERPROFILE") & "\Dropbox\Trk_Insp_1204_10_08_2016.xlsx" Debug.Print S End Sub 实际上是一个char数组A而不是标量'20'

当您执行20时,它会显示字符disp(A),但当您'20'时,它会首先将disp(A*2)个元素(A)转换为double({ {1}})然后乘以2:

['2','0']