然后,我在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?
答案 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']