これはテストされていないことに注意してください。
ボールの位置を抽出すると、その輪郭を取得できます。私の提案は、明るいパッチと暗いパッチ (五角形) を持つサッカー ボールでのみ機能します。
白と黒のパッチの両方を取得するための適切なバイナリしきい値を決定します。侵食や膨張などの画像操作を行って、ステッチによって作成されたパッチ間の亀裂を取り除きます。ボールの周りに白い円を描いて、黒いパッチが「ボールの穴」と見なされないようにし、ボールの内側の輪郭をつかむ準備ができていることを確認します. 主な輪郭は白いパッチでできた白い輪郭であり、すべての黒い輪郭は暗いパッチです。
弱点:汚れたボールは、バイナリしきい値処理で問題が発生する可能性があります。おそらく、適応しきい値を使用しますか?
1. ブラック パッチのサイズと距離にルックアップ テーブル/数式(?)を使用する
ブラック パッチのサイズは、ボールの中心からの距離によって異なります。アルゴリズムに、中心からの黒いパッチの距離とそのサイズ (ボールのサイズに対する両方の値) に関する学習データを入力します。
例えば:
Ball in recorded frame has bounding box of 200x200 px and area of 30000px
Found 6 black patches inside:
patch 1 is in the middle (distance 0px from center) and has area of 600px
patch 2 is on the side (distance 50px from center) and has area of 150px
patch 3... patch 4... and so on
したがって、ルックアップ テーブルにデータを入力します。
distance = 0% -> area = 2%
distance = 25% -> area = 0.5%
distance = ... -> area = ...
and so on
検出したものがボールかどうかを確認するときは、黒いパッチのサイズを確認します。それらのサイズとボールの中心からの距離のほとんどが許容範囲内にある場合、検出されたオブジェクトはボールです。
2. 輪郭形状の確認
を使用して各輪郭を確認できますcvApproxPoly
。ほとんどの黒い輪郭が五角形の場合、それはボールです。