我试图使用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
我的代码有什么问题?
我试图使用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
我的代码有什么问题?
你的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
(除了第三维)相同,否则。返回布尔表达式条目
的索引。true
false
find
true