c++ - 调试断言失败!人脸识别openCv中的detectAndDisplay函数

标签 c++ opencv face-recognition

我正在尝试运行该程序并且构建良好但无法调试。捕获第一帧然后给出以下错误。

我尝试在 Debug模式下检查并发现了这一点

imshow(window_name, frame);

Error !!!

这是从 OpenCV 博客复制的工作代码

            #include "opencv2/objdetect/objdetect.hpp"
            #include "opencv2/video/video.hpp"
            #include "opencv2/highgui/highgui.hpp"
            #include "opencv2/imgproc/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 = "haarcascade_frontalface_alt.xml";
            String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
            CascadeClassifier face_cascade;
            CascadeClassifier eyes_cascade;
            string window_name = "Capture - Face detection";
            RNG rng(12345);

            /** @function main */
            int main(int argc, const char** argv)
            {
                CvCapture* capture;
                Mat frame;

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

                //-- 2. Read the video stream
                capture = cvCaptureFromCAM(CV_CAP_ANY);



                if (capture)
                {
                    while (true)
                    {
                        frame = cvQueryFrame(capture);

                        //-- 3. Apply the classifier to the frame
                        if (!frame.empty())
                        {
                            detectAndDisplay(frame);
                        }
                        else
                        {
                            printf(" --(!) No captured frame -- Break!");
                            break;
                        }

                        int c = waitKey(10);
                        if ((char)c == 'c') { break; }
                    }
                }
                return 0;
            }

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

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

                //-- Detect faces
                face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));

                for (size_t i = 0; i < faces.size(); i++)
                {
                    Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
                    ellipse(frame, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);

                    Mat faceROI = frame_gray(faces[i]);
                    std::vector<Rect> eyes;

                    //-- In each face, detect eyes
                    eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));

                    for (size_t j = 0; j < eyes.size(); j++)
                    {
                        Point center(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5);
                        int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
                        circle(frame, center, radius, Scalar(255, 0, 0), 4, 8, 0);
                    }
                }
                //-- Show what you got
                imshow(window_name, frame);
            }

中选择值时出错
 capture = cvCaptureFromCAM(-1) 

是-1。

我得到的是没有错误的灰色窗口。 imshow with Grey Window, No Error

最佳答案

我将平台工具集从 Visual Studio 2015(v140) 更改为 Visual Studio 2013(v120),如图所示。我不知道为什么,但它奏效了。

Visual Studio 2015(v140)

Visual Studio 2013(v120)

关于c++ - 调试断言失败!人脸识别openCv中的detectAndDisplay函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309650/

相关文章:

java - 如何通过JNI操作CameraPreview bytearray? (开放式简历)

使用 dlib 的 Python 裁剪人脸图像

c++ - 如何有条件地终止 OpenMP 中的并行区域?

c++ - 在 C++ 中使用枚举而不是结构进行标记分派(dispatch)

c++ - 如何将函数指针作为参数传递给重载的成员函数

python人脸识别慢

.net - 使用 OpenCV 的感兴趣区域

c++ - 将数字求和到 N 的最快算法

python - 无法在 mac 上的 python 中使用 opencv 读取 xvid 视频

python - 克服 python 中的 opencv CV_IO_MAX_IMAGE_PIXELS 限制