opencv detectMultiScale

时间:2016-01-02 07:26:33

标签: c++ windows opencv

我正在尝试学习opencv和对象检测。我在opencv示例中使用了objecdetection.cpp,当我运行它时出现此错误

enter image description here

级联加载非常精细,而且摄像头唯一的问题是detectmultiscale因为每当我评论它时程序都不会崩溃 这是objectdecetion2.cpp的代码

    #include "opencv2/objdetect.hpp"
    #include "opencv2/videoio.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/imgproc.hpp"

    #include <iostream>
    #include <stdio.h>

    using namespace std;
    using namespace cv;

    /** Function Headers */
    void detectAndDisplay(Mat frame);

    /** Global variables */
    String face_cascade_name = "..\\Debug\\haarcascade_frontalface_alt.xml";
    String eyes_cascade_name = "..\\Debug\\haarcascade_eye_tree_eyeglasses.xml";
    CascadeClassifier face_cascade;
    CascadeClassifier eyes_cascade;
    String window_name = "Capture - Face detection";
    /**
    * @function main
    */
    int main(void)
    {
        VideoCapture capture;
        Mat frame;

        //-- 1. Load the cascade
        if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading face cascade\n"); return -1; };
        if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading eyes cascade\n"); return -1; };

        //-- 2. Read the video stream
        capture.open(0);
        if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

        while (capture.read(frame))
        {
            if (frame.empty())
            {
                printf(" --(!) No captured frame -- Break!");
                break;
            }

            //-- 3. Apply the classifier to the frame
            detectAndDisplay(frame);


            //-- bail out if escape was pressed
            int c = waitKey(10);
            if ((char)c == 27) { break; }
        }
        return 0;
    }

    /**
    * @function detectAndDisplay
    */
    void detectAndDisplay(Mat frame)
    {
        std::vector<Rect> faces;
        Mat frame_gray;

        cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
        equalizeHist(frame_gray, frame_gray);

        face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0, Size(80, 80));

        imshow(window_name, frame);
    }

2 个答案:

答案 0 :(得分:3)

您可能遇到过OpenCV错误,如下所述:http://code.opencv.org/issues/3710

您发布的代码看起来不错,否则。

答案 1 :(得分:0)

您发布的代码是对的!但我怀疑你的opencv配置是不对的!如果您在Windows上工作,请检查.dll文件和lib文件!