4

私はJavaCV / OpenCVのことは初めてなので、完全なばかである場合は事前に謝罪してください...

画像内の「プライマリ/メイン」の顔を検出する必要があります (この画像は、ほとんどの場合「プロフィール写真」になります)。顔認識は必要ありません。

異なるhaarcascadeファイルはそれぞれ異なる顔を検出し、検出された顔は実際には顔ではなく画像内の任意のアーティファクトである場合があるため、どの顔を使用するかを決定する必要があります。検出された顔が実際の顔であると仮定すると、プロフィール写真であるため、最大の顔を使用するのが理にかなっています。

私が抱えている主な問題は、コードが(一部の画像について)複数の顔を検出し、最大の顔が実際にはまったく顔ではないことです。コードが 2 つの顔を検出した私のテストの 1 つの例を次に示します。

顔:java.awt.Rectangle[x=62,y=42,width=78,height=78] 6084の
面積 バスト:java.awt.Rectangle[x=86,y=144,width=80,height=80] 6400の面積

簡単に言えば、私の質問は、複数の顔が検出された場合、どの顔が OpenCV が顔として認識するものに最もよく一致するかを判断するために使用できる何らかの評価尺度がありますか?

4

1 に答える 1

1

残念ながら、顔検出ではそのようなオプションは提供されません。あなたのコードは次のようになると思います:

CvSeq faces = cvHaarDetectObjects(grayImage, cascade, ......);

したがって、実際には面を区切る一連の長方形へのポインターにすぎない CvSeq を取得します。それについての情報はこれ以上得られません。

通常、いくつかの特別な場合を除いて、バストは頭の下にあると言います(さらに、頭は体の残りの上にあります)。

バストを破棄するには、Y 位置を利用するだけです。

体の一部ではない他の要素が顔として検出された場合、あなたは運命にあります.

于 2013-11-01T20:58:39.560 に答える