カラーブロックを探す
ビデオ チュートリアル 4 - 色認識: https://singtown.com/learn/49993/
find_blobs 関数
ボールの追跡は、OpenMV で最もよく使用される機能です。これは、10 分ですぐに始めましょう にあります。\ カラー ブロックは、find_blobs 関数を使用して見つけることができます。find_blobs の詳細について説明します。
image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
ここには多くのパラメータがあります。
- Thresholds は色のしきい値です。 注: このパラメータはリストであり、複数の色を含めることができます。必要な色が 1 つだけの場合、このリストに必要な色の値は 1 つだけです。複数の色のしきい値が必要な場合、このリストには複数の色のしきい値が必要です。注: 返されたカラー ブロック オブジェクト BLOB で code メソッドを呼び出して、カラー ブロックが何色であるかを判断できます。
red = (xxx,xxx,xxx,xxx,xxx,xxx)
blue = (xxx,xxx,xxx,xxx,xxx,xxx)
yellow = (xxx,xxx,xxx,xxx,xxx,xxx)
img=sensor.snapshot()
red_blobs = img.find_blobs([red])
color_blobs = img.find_blobs([red,blue, yellow])
roi は「関心領域」です。 使用統計 で紹介されています。
left_roi = [0,0,160,240]\ blobs = img.find_blobs([red],roi=left_roi)
x_stride は、検索されるカラー ブロックの x 方向の最小幅のピクセルです。デフォルトは 2 です。幅が 10 ピクセルを超えるカラー ブロックのみを検索したい場合は、このパラメータを 10 に設定します。
blobs = img.find_blobs([red],x_stride=10)
y_stride は、検索されるカラー ブロックの y 方向の最小幅のピクセルです。デフォルトは 1 です。幅が 5 ピクセルを超えるカラー ブロックのみを検索したい場合は、このパラメータを 5 に設定します。
blobs = img.find_blobs([red],y_stride=5)
invert は、しきい値を反転し、しきい値以外の色をしきい値として検索します。
area_threshold 領域のしきい値。カラーブロックの枠付き領域がこの値より小さい場合、フィルタで除外されます。
ピクセル_threshold ピクセル数のしきい値。カラー パッチ内のピクセル数がこの値より小さい場合、フィルターで除外されます。
merge Merge を True に設定すると、重複するすべての BLOB が 1 つにマージされます。\ 注: これにより、色に関係なく、すべての BLOB がマージされます。複数の色の blob を混同したい場合は、異なる色のしきい値を指定して find_blobs を個別に呼び出します。
all_blobs = img.find_blobs([red,blue,yellow],merge=True)
red_blobs = img.find_blobs([red],merge=True)
blue_blobs = img.find_blobs([blue],merge=True)
yellow_blobs = img.find_blobs([yellow],merge=True)
- マージン境界を 1 に設定すると、2 つのブロブが 1 ピクセル離れていればマージされます。
しきい値
色のしきい値の構造は次のとおりです。
red = (minL, maxL, minA, maxA, minB, maxB)
タプル内の値はそれぞれ L A B の最大値と最小値です。
IDE イメージでこのしきい値を取得する場合は、[10 分ですぐに始められる] (/quick-starter.md) を参照してください。
IDE の新しいバージョンには、より便利なしきい値選択ツールがあります (以下を参照)。
色のしきい値選択ツール
しきい値選択ツールが OpenMV IDE に追加され、色のしきい値のデバッグが大幅に容易になります。
まず hello world.py を実行して、IDE のフレームバッファにパターンを表示させます。\ \ 次に、[ツール] → [Mechine Vision] → [しきい値エディタ] を開きます。\
[フレーム バッファ] をクリックして IDE に画像を取得し、[画像ファイル] をクリックして画像ファイルを自分で選択します。
6 つのスライダーをドラッグして、しきい値の結果をリアルタイムで確認します。目的の結果は、ターゲットの色を白に、その他のすべての色を黒に変えることです。
blob はリストです
find_blobs オブジェクトは、複数の BLOB のリストを返します。 (ブロブとブロブの区別に注意してください。これは、複数のカラー ブロックを 1 つのカラー ブロックから区別するために使用される名前にすぎません)。\ リストは、C 言語の配列に似ています。ブロブ リストには、多数のブロブ オブジェクトが含まれます。各ブロブ オブジェクトには、カラー ブロックに関する情報が含まれます。
blobs = img.find_blobs([red])
ブロブはたくさんの色のブロックです。
for ループを使用して、すべてのカラー ブロックを検索できます。
for blob in blobs:
print(blob.cx())
for ループの使用については、[Python の背景知識] (/python-background.md) を参照してください。
ブロブカラーブロックオブジェクト
BLOB には複数のメソッドがあります。
blob.rect() は、このカラー ブロックの外枠、つまり長方形のタプル(x, y, w, h) を返します。これは、image.draw_rectangle で直接使用できます。
blob.x() は、カラー ブロックの外枠の x 座標 (int) を返します。これは blob[0] からも取得できます。
blob.y() は、カラー ブロックの外枠の y 座標 (int) を返します。これは、blob[1] からも取得できます。
blob.w() はカラー ブロックの外枠の幅 w (int) を返します。これは blob[2] からも取得できます。
blob.h() はカラー ブロックの外枠の高さ h (int) を返します。これは blob[3] からも取得できます。
blob.pixels() はカラー ブロックのピクセル数 (int) を返します。これは blob[4] からも取得できます。
blob.cx() は、カラー ブロックの外枠の中心 x 座標 (int) を返します。これは blob[5] からも取得できます。
blob.cy() は、カラー ブロックの外枠の中心 y 座標 (int) を返します。これは、blob[6] からも取得できます。
blob.rotation() は、カラー ブロックの回転角度をラジアン (浮動小数点数) で返します。カラーブロックが鉛筆に似ている場合、この値は 0 ~ 180° になります。カラー パッチが円の場合、この値は役に立ちません。カラー ブロックにまったく対称性がない場合は、0 ~ 360° が得られます。これは blob[7] からも取得できます。
blob.code() は 16 ビットの数値を返し、各ビットは各しきい値に対応します。例えば:
blobs = img.find_blobs([red, blue, yellow], merge=True)
カラーブロックが赤の場合、そのコードは0001、青の場合、コードは0010です。注:BLOBがマージされる場合があります。この関数は、カラーコードを見つけるために使用できます。また、Blob \ [8 ]を介して取得することもできます。
blob.count \(\)merge = trueの場合、複数のブロブが1つのブロブにマージされ、この関数はこの数値を返します。 merge = falseの場合、返品値は常に1です。また、Blob \ [9 ]を介して取得することもできます。
blob.area() は、カラーブロックの外枠の面積を返します。 (w * h) と等しい必要があります
Blob.Density \ () カラーブロックの密度を返します。これは、パッチ内のピクセル数を境界ボックスの面積で割ったものに等しくなります。密度が低い場合は、ターゲットが十分にロックされていないことを意味します。\ たとえば、赤い円を識別する場合、返される blob.pixels() はターゲット円のピクセル数、blob.area() は円の外接正方形の面積です。