0

私のプログラムでは人の顔を検出していますが、コードはうまく機能していますが、目の検出「cascade.detectMultiScale()」には多くのパラメーターがあるため、このコードについて心配していますが、顔検出にはこれらのいくつかを使用していますパラメータ、顔の検出方法、「cascade.detectMultiScale()」で検出オブジェクトのサイズを初期化していないかどうか

 cascade.detectMultiScale(gray, faces, 1.2, 2);

for (int i = 0; i < faces.size(); i++)
{
    Rect r = faces[i];
    rectangle(src, Point(r.x, r.y), Point(r.x + r.width, r.y + r.height), CV_RGB(0,0,255));
}
4

1 に答える 1

0

おそらく、統合された Open CV 関数 ( Open CV cascade classifier ) に関するマニュアルを読む必要があります。最後の 2 つのパラメータは「minSize」と「maxSize」で、検出されたオブジェクトの最小サイズと最大サイズを設定できます。私のプロジェクトでは、1080p HDTV チャンネルでナレーターの顔を検出しているので、構成は次のようになります。

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(500, 500) );

...つまり、スケール ファクター = 1.1 で、顔が 1 つしか検出されていないことを意味します。 CV_HAAR_SCALE_IMAGEつまり、検出器ではなく、アルゴリズムが画像のスケーリングを担当することを意味します (これは、一般的に低速です)。次のようなものも使用できます0|CV_HAAR_FIND_BIGGEST_OBJECTすべての候補の中で最大のオブジェクトを抽出したい場合。私の場合、ディテクターに 500x500 ピクセル以上のオブジェクトを強制的に検索させました。これにより、リアルタイム処理が高速化され、ディテクターが誤検出を行うのを防ぐことができました。また、統合された検出器はいくつかの事前定義されたパラメーターから派生していることにも注意してください (特にトレーニング段階で)。用途に合わせてより優れた検出器 (およびより優れた検出精度および/またはパフォーマンス) を作成することに本当に関心がある場合は、カスタムメイドの分類器を検討する必要があります。ただし、注意してください: パラメーター (トレーニングの反復回数、トレーニング モード、オブジェクトのプロパティ、オブジェクトの配置など) を変更すると、状況が改善される可能性がありますが、それぞれのパラメーター (およびパラメーター間の影響と最終結果への影響) を十分に理解できます。

于 2013-01-22T11:07:41.570 に答える