opencv detectMultiScale

Posted

技术标签:

【中文标题】opencv detectMultiScale【英文标题】: 【发布时间】:2016-01-02 07:26:33 【问题描述】:

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

级联加载非常好,而且相机唯一的问题是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);
    

【问题讨论】:

你不混合调试/发布 dll 吗? 混合调试/发布 dll 是什么意思? 【参考方案1】:

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

您发布的代码在我看来还可以,否则。

【讨论】:

所以我应该把我的图像放大吗?【参考方案2】:

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

【讨论】:

我一步一步跟着这个视频介绍如何设置opencv youtube.com/watch?v=tHX3MLzwF6Q 是的,我知道,因为您的代码与 Opencv 示例代码相同。所以配置有问题。 你用过opencv 3.0.0吗? 没有,也许我以后会尝试opencv 2.4,我朋友说3.0有bug?是真的吗?

以上是关于opencv detectMultiScale的主要内容,如果未能解决你的问题,请参考以下文章

cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

opencv相机标定

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

如何使用opencv实现图像匹配

OpenCV 简介 携手走进 OpenCV 的世界

如何利用openCV函数查看opencv版本