我试图使用matlab在图像中找到第一个红色的像素位置。
我做什么
I = imread('test.jpg');
row = size(I,1);
col = size(I,2);
for rr = 1:row
for cc = 1:col
if [rr cc :] = [ 255 0 0 ]
flag =1;
break;
end
end
end
我的代码有什么问题?
答案 0 :(得分:2)
您的if
声明存在问题
首先,=
运算符和==
运算符之间存在根本区别(不仅在matlab中)。虽然第一个(=
)是**赋值运算符,但第二个(==
)是布尔值测试 - 这是你想要的。
其次,您需要比较位置rr,cc
的图像值,而不是位置本身。
if squeeze( I(rr,cc,:) ) == [255;0;0]
更有可能做你期望的事。
虽然我们在这里,但更好的做法是对matlab语句进行矢量化。类似的东西:
[rr cc] = find( I(:,:,1) == 255 & I(:,:,2) == 0 & I(:,:,3) == 0 , 1, 'first' );
编辑:有关矢量化方法的更多详细信息:
表达式
I(:,:,1) == 255 & I(:,:,2) == 0 & I(:,:,3) == 3
创建一个2D布尔矩阵,其大小与I
相同(除了第三维),每个红色像素为true
,否则为false
。
find
返回布尔表达式的true
条目的索引。