壁紙のような大きな画像Aに、アイコンのような小さな画像Bが含まれているとします。
画像Bが、画像Aのどの位置に含まれているかを調べることってできるでしょうか?
原理的には、メモリ展開して、
完全一致するまでバイナリコンペアすればいいのでは?
非可逆圧縮しているとコンペアできなくなりますが。
RES ありがとうございます。
なるほど、バイナリコンペアですね〜。APIとかあるのでしょうか?
それと、一致した場所から画像の座標が計算できるのでしょうか?
「バイナリコンペア」といっても、
画像データを2次元配列に展開しているのなら
矩形範囲の各要素を順次比較するだけです。
一致位置が座標になります。
PictureBoxに置いているのなら、(速度を気にしないなら)
矩形範囲を順次Pointして比較していくだけです。
やはり一致位置が座標になります。
速度が気になるならGDIを使えばいいでしょう。
画像ファイルどうしで比較しようと思ったら、
まず画像ファイルフォーマットを知る必要があります。
圧縮された画像の場合はまず展開する必要があります。
展開の方法は圧縮フォーマットに依存します。
既に述べたように非可逆圧縮フォーマットの場合、比較は極めて困難です。
完全一致比較の場合、非可逆圧縮でなければ比較的簡単ですが、
拡大縮小、回転、鏡像、減色、ゆがみ、ノイズなどを考慮して比較するとなると
精度によってはAI並みのパターンマッチングアルゴリズムが必要になります。
BMPをGDIで色々やってみます。
ありがとうございました。
ツイート | ![]() |