web-dev-qa-db-ja.com

OpenCVを使用して画像内の長方形の位置を見つける

OpenCVを使用してiPhoneゲームのスクリーンショットを「解析」しようとしています Blocked 。スクリーンショットは次のようにトリミングされています。

Blocked screenshot

今のところ、各長方形を構成する4つの点のそれぞれの座標を見つけようとしていると思います。 OpenCVに付属しているサンプルファイルsquares.cを見ましたが、この画像でそのアルゴリズムを実行すると、72個の長方形が表示されます。これには、明らかに私の1つとして数えたくない空白の長方形の領域が含まれます。長方形。これにアプローチするためのより良い方法は何ですか? Googleで調べてみましたが、すべての検索結果で、関連する有用な情報がほとんどありません。

14
dancavallaro

同様の問題についてはすでに説明しました: この画像の長方形を認識する方法は?

あなたのデータに関しては、あなたが見つけようとしている長方形は唯一の黒いオブジェクトです。したがって、しきい値の2値化を試みることができます。黒いピクセルは、3つすべてのRGB値が40未満のピクセルです(経験的にわかっています)。この簡単な操作で、画像は次のようになります。

binarized picture

その後、ハフ変換を適用して線を見つけることができます(私が参照したトピックで説明しました)。 X軸とY軸への黒いピクセルの積分投影を計算します。 (Xへの射影はx_iのベクトルです-x_iに等しい最初の座標を持つような黒いピクセルの数)。したがって、投影のピークとして可能なx値とy値を取得します。次に、見つかったxとyによって制限されている可能性のあるすべてのセグメントを調べます((x_i、y_j)と(x_i、y_k)の間に黒いピクセルがたくさんある場合は、おそらく線があります)。最後に、線分を長方形に構成します。

14

私は、ロバートが私の質問に対するコメントで示唆したように、元の方法に基づいて構築することになりました。長方形のリストを取得したら、次に実行して、各長方形の平均色を計算します。平均色の赤、緑、青の成分がそれぞれ灰色と青の長方形の色の10%以内にあるかどうかを確認し、ある場合は長方形を保存し、そうでない場合は破棄します。このプロセスは私に次のようなものを与えます:

screenshot

これから、必要な情報(ゲームウィンドウを6x6グリッドと見なして、各長方形の方向、開始点、および長さ)を取得するのは簡単です。

6
dancavallaro

ブロックはビットマップのように見えます-ブロックサイズ/色/向きごとに異なるテンプレートと一致する単純なテンプレートを使用してみませんか?

3
Niki

ハリスコーナー検出器のような多くのコーナー検出器の1つを試してください。また、一般的には、複数の解像度で試してみることをお勧めします。さまざまな倍率の前処理も行ってください。ある種の色が支配的な正方形が必要なようですが、最初にcvsplitのようなものを使用し、次に色をしきい値処理することで、他の色を抑制することができます...その領域だけが残ります....それに続いてトリミング操作...それもうまくいくと思います..。

0
Egon