我在MATLAB中运行代码时总是收到此错误消息。我想做模板匹配来识别一个角色。
??? Operands to the || and && operators must be convertible to logical scalar values.
Error in ==> readLetter at 17
if vd==1 || vd==2
我的代码是
load NewTemplates % Loads the templates of characters in the memory.
gambar = imresize(gambar,[42 24]); % Resize the input image
comp = [];
for n = 1 : length(NewTemplates)
sem = corr2(NewTemplates{1,n}, gambar); % Correlation with every image in the template for best matching.
comp = [comp sem]; % Record the value of correlation for each template's character.
end
vd = find(comp == max(comp)); % Find index of highest matched character.
% According to the index assign to 'letter'.
if vd==1 || vd==2
letter='A';
如何解决?
答案 0 :(得分:1)
当comp包含多个具有最大值的元素时,
find()返回一个向量。
见:
a = [1:5 5];
index = find(a==max(a)); % index = 5 6
numel(index) % ans = 2
因此,使用max函数代替find 或仅使用第一个匹配。
答案 1 :(得分:0)
您可能在vd
中返回了非标量值(即,相同最大值的许多位置)。因此,在if
语句中按元素方式比较向量会产生错误。
如果您想要多个最大值行为(除非您想检查1
s的向量,否则它没有多大意义)您可以使用|
运算符
r = randi(2,10,1);
vd = find(r==max(r));
if vd==1 | vd==2
letter='A';
end
如果没有,请尝试从vd
(即第一个实例vd(1)
或下面的随机实例)中选择一个值,然后使用if
语句检查其值:
vd = vd(randi(length(vd))); % random index from returned in vd
if vd==1 || vd==2
letter='A';
end