画像内の色を検索する方法
9 views (last 30 days)
Show older comments
ある画像の中に赤い部分があるのですが、その範囲の座標を知ることができる関数を教えていただきたいです。
0 Comments
Accepted Answer
Atsushi Ueno
on 26 Jun 2021
Edited: Atsushi Ueno
on 26 Jun 2021
MATLABのfind関数で赤い範囲の座標を知る事が出来ます。
find関数の出力は「赤い画素の配列」なので、max関数やmin関数でその範囲を知る事が出来ます
find関数の出力は線形インデックスなので、これを添え字(X,Y座標)に変換する為ind2sub関数を併用します。
下記コードは具体的な例です
pic = imread('sample.png'); % sample.png(添付ファイル)を読み込む
whos pic % 画像は、100×100×3のuint8配列として読み込まれた
red = 200; % ここでは「"赤い"とはRGBのR成分がuint8(0~255)の200以上」と定義する
[x, y] = ind2sub(size(pic), find(pic(:,:,1) >= red)); % 赤いピクセルを探しx,y座標を得る
size(x) % 赤い点が100ピクセル見つかった。下記はx座標が100個ある事を意味する。y座標も同様
pic(min(x),min(y),:) = 255; % 試しに(最小のx座標, 最小のy座標)に白い点を打ってみる
pic(max(x),max(y),:) = 555; % 試しに(最大のx座標, 最大のy座標)に白い点を打ってみる
imshow(pic);
5 Comments
Atsushi Ueno
on 27 Jun 2021
@Hernia Babyさん、ありがとうございます。コメント回答の通りで、論理演算子が&&でなく&である事がポイントです。
論理 AND (&&) と論理 OR (||) 演算子のオペランドは logical スカラー値に変換できなければなりません。
画像が100*100画素なら(A(:,:,1)>=aは100*100の配列(各画素の判定値)になります。この10000個のTRUE/FALSEを論理AND(&&)は受け付けません。配列の要素毎にそれぞれ演算するのが&演算子です。
ヒント
- MATLAB® では、記号 & と && が異なる演算を実行します。ここで説明する要素単位 AND 演算子は & です。ショートサーキット AND 演算子は && です。
More Answers (0)
See Also
Categories
Find more on イメージ算術 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!