0

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

我的代码有什么问题?

4

1 回答 1

2

你的if说法有问题。首先,运算符和运算符
之间存在根本区别(不仅在matlab中)。虽然第一个 ( ) 是一个 **assignment 运算符,但第二个 ( ) 是一个布尔测试 - 这就是您想要的。 其次,您需要比较位置的图像值,而不是位置本身。======
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(除了第三维)相同,否则。返回布尔表达式条目 的索引。truefalse
findtrue

于 2013-03-14T10:37:41.433 回答