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だけではありません)。最初の()は**代入演算子ですが、2番目の()はブールテストです-これはあなたが望むものです。次に、場所自体ではなく、場所 での画像値を比較する必要があります。======
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

赤のピクセルごとIに(3次元を除いて)同じサイズの2Dブール行列を作成します。は、ブール式のエントリの インデックスを返します。truefalse
findtrue

于 2013-03-14T10:37:41.433 に答える