找到第一个红色(255,0,0)像素位置?使用matlab

时间:2013-03-14 10:34:32

标签: matlab

我试图使用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

我的代码有什么问题?

1 个答案:

答案 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,否则为falsefind返回布尔表达式的true条目的索引。