HaarDetectObject()関数を使用して目を検出すると、次のような結果(detectedObjects)が得られます。
[((110, 47, 44, 44), 11), ((27, 45, 54, 54), 31)]
[((114, 49, 40, 40), 10), ((28, 50, 47, 47), 17)]
[((31, 50, 47, 47), 18), ((106, 47, 44, 44), 3)]
[((106, 46, 44, 44), 38), ((29, 53, 45, 45), 35), ((18, 30, 74, 74), 4)]
[((98, 54, 36, 36), 7), ((108, 48, 45, 45), 31), ((26, 52, 49, 49), 49)]
[((109, 46, 45, 45), 28), ((29, 50, 49, 49), 38)]
[((109, 46, 44, 44), 29), ((27, 47, 53, 53), 27), ((123, 45, 48, 48), 3)]
[((108, 46, 44, 44), 35), ((28, 50, 49, 49), 33)]
[((109, 47, 45, 45), 34), ((28, 53, 47, 47), 35), ((126, 50, 44, 44), 3)]
[((109, 47, 44, 44), 29), ((29, 47, 51, 51), 39)]
[((106, 47, 42, 42), 49), ((27, 49, 49, 49), 30)]
[((31, 54, 42, 42), 13), ((110, 46, 44, 44), 4), ((125, 46, 44, 44), 4), ((27, 35, 66, 66), 6)]
等々
私が知っていることは:
(110、47、44、44)、11)、これはx、y、w、h 、?
x、yは、「目」で検出された「目」の左上隅の座標であり、w、hは、検出された目の領域を決定するための幅と高さであるため、cvRect形式になります。
ご覧のとおり、最後の検出には4つの目があります。したがって、完全に検出された目が2つあることをどのようにして知ることができますか?つまり、任意のiの目[i] [0] [0]を見ると、目が右か左かを知ることができます。ただし、ここでは、左目と右目が2つあり、eyes[0]とeyes[3]が左目、eyes[1]とeyes[2]が右目です。
そしてこれが私の質問です。右目と左目の両方で検出された2つの結果のうち1つだけを取得する必要がある場合、どうすればよいですか?
以前、eye[i][1]はある種のスコアとして使用できると思いました。しばらくインターネットにアクセスできなかったので、そう思いました。しかし、私がちょうど発見したように、それはいくつかの品質スコアではありません。
したがって、この場合、eyes [0] [1]は13、eyes [1] [1]は4、eyes [2] [1]は4、eyes[3][1]は6です。これをQと呼びましょう。
残りの検出では、他の検出のQが高く、通常は約40〜60であるというパターンが見られたため、その範囲内のQが最良の検出を示していると思いましたが、前に述べたように、そうではありません。
では、「eyes」のどの「eye」が最良の検出であるかをどのように判断するのですか?