7

cvHaarDetectObjects()メソッドを使用して正方形を検出し、幅と高さを取得できるかどうかを専門家に説明してもらえますか?この方法を顔検出に使用するコードを見つけましたが、長方形の検出に使用できるかどうかを知る必要があります。

    String src="src/squiredetection/MY.JPG";
    IplImage grabbedImage = cvLoadImage(src);
    IplImage grayImage    = IplImage.create(grabbedImage.width(),  grabbedImage.height(), IPL_DEPTH_8U, 1);

        cvCvtColor(grabbedImage, grayImage, CV_BGR2GRAY);

        CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, 1.1, 3, 0);//*
        for (int i = 0; i < faces.total(); i++) {
            CvRect r = new CvRect(cvGetSeqElem(faces, i));
            cvRectangle(grabbedImage, cvPoint(r.x(), r.y()), cvPoint(r.x()+r.width(), r.y()+r.height()), CvScalar.RED, 1, CV_AA, 0);
         /*   hatPoints[0].x = r.x-r.width/10;    hatPoints[0].y = r.y-r.height/10;
            hatPoints[1].x = r.x+r.width*11/10; hatPoints[1].y = r.y-r.height/10;
            hatPoints[2].x = r.x+r.width/2;     hatPoints[2].y = r.y-r.height/2;*/
          //  cvFillConvexPoly(grabbedImage, hatPoints, hatPoints.length, CvScalar.GREEN, CV_AA, 0);
        }

上記のメソッドを使用すると、次の例外がスローされます

OpenCV Error: Bad argument (Invalid classifier cascade) in unknown function, file C:\slave\WinInstallerMegaPack\src\opencv\modules\objdetect\src\haar.cpp, line 1036
Exception in thread "main" java.lang.RuntimeException: C:\slave\WinInstallerMegaPack\src\opencv\modules\objdetect\src\haar.cpp:1036: error: (-5) Invalid classifier cascade

    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(Native Method)
    at com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects(opencv_objdetect.java:243)
    at squiredetection.Test2.main(Test2.java:52 I have put * on this line)

そのための簡単なコード例を提供してください。

4

2 に答える 2

6

cvHaarDetectObjects()HaarCascade顔だけでなく物体や形状の検出にも使用され、分類器に依存します。

渡すface haarcascade xmlと、面の配列が返されるかeyenose、 などの HaarCascade XML ファイルも使用できます。haarcascade xmlを使用して独自の陽性および陰性サンプルを作成することにより、カスタムにすることもできますopencv_traincascade.exe

CvSeq faces = cvHaarDetectObjects(grayImage, classifier, storage,
                1.1, 3, CV_HAAR_DO_CANNY_PRUNING);

for (int i = 0; i < faces.total(); i++) {
   // its ok
}

opencv docの詳細

長方形検出の場合:

に長方形検出の例がありOpenCV、チェス盤の正方形を検出するために使用します。squares.c..\OpenCV\samples\c\ ディレクトリを見てください。

opencv でこのチェス盤検出サンプルを参照してください

Invalid classifier cascade in unknown functionエラーは、渡された分類子が正しくフォーマットされていないか、何かが欠落していることを意味します。分類子 xml ファイルが有効かどうかを確認してください。

于 2012-06-28T10:42:41.093 に答える
2

cvHaarDetectObjects画像で検出された複数の顔を返します。単一の CvSeq だけでなく、結果を格納するために CvSeq の配列を宣言する必要があります。

// There can be more than one face in an image.
// So create a growable sequence of faces.
// Detect the objects and store them in the sequence
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                    1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
                                    cvSize(40, 40) );

上記のコードは、次のサイトから抽出されました。

http://opencv.willowgarage.com/wiki/FaceDetection

于 2012-06-26T13:33:39.160 に答える