0

OpenCV(C ++)に、「haarcascade_mcs_upperbody.xml」を使用して上半身を検出するコードがあります。単一の上半身を検出します。複数の上半身を検出させるにはどうすればよいですか。CV_HAAR_FIND_BIGGEST_OBJECTは最大のオブジェクトのみを検出していると思います。しかし、私はこの問題を解決する方法を知りません

コードは次のようになります。

int main(int argc, const char** argv)
{
CascadeClassifier body_cascade;
body_cascade.load("haarcascade_mcs_upperbody.xml");

VideoCapture captureDevice;
captureDevice.open(0);

Mat captureFrame;
Mat grayscaleFrame;

namedWindow("outputCapture", 1);

//create a loop to capture and find faces
while(true)
{
    //capture a new image frame
    captureDevice>>captureFrame;

    //convert captured image to gray scale and equalize
    cvtColor(captureFrame, grayscaleFrame, CV_BGR2GRAY);
    equalizeHist(grayscaleFrame, grayscaleFrame);

    //create a vector array to store the face found
    std::vector<Rect> bodies;

    //find faces and store them in the vector array
    body_cascade.detectMultiScale(grayscaleFrame, faces, 1.1, 3,                                                                                                                                     
    CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE, Size(30,30));    
    //draw a rectangle for all found faces in the vector array on the original image
    for(int i = 0; i < faces.size(); i++)
    {
        Point pt1(bodies[i].x + bodies[i].width, bodies[i].y + bodies[i].height);
        Point pt2(bodies[i].x, bodies[i].y);

        rectangle(captureFrame, pt1, pt2, cvScalar(0, 255, 0, 0), 1, 8, 0);
    }

    //print the output
    imshow("outputCapture", captureFrame);

    //pause for 33ms
    waitKey(33);
}

return 0;
}
4

1 に答える 1

2

face_cascadeどこにも定義されていないため、コードに矛盾があるようですが、そのタイプはであると思いCascadeClassifierます。検出されたすべてのオブジェクトをベクトル
detectMultiScaleに格納します。facesオブジェクトが1つだけ含まれていますか?最大のオブジェクトだけでなく、すべてのオブジェクトを検出する必要があるため
、フラグを削除してみてください。 また、パラメータとパラメータを正しく設定してください(ドキュメントを参照)。これらのパラメータは、検出可能なオブジェクトの最小サイズと最大サイズを決定するためです。CV_HAAR_FIND_BIGGEST_OBJECT
minSizemaxSize

于 2013-03-10T08:01:25.157 に答える