调试断言失败!在人脸识别打开Cv的检测和显示功能中



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

我尝试在调试模式下检查,可以弄清楚

imshow(window_name, frame);

错误!!!

这是从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 loadingn"); return -1; };
                if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error loadingn"); 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。

我得到没有错误的 GRey 窗口。显示灰色窗口,无错误

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

Visual Studio 2015(v140)

Visual Studio 2013(v120)

如果您的面部ROI超出框架范围,则可能会发生这种情况。因为您尝试复制此区域,所以出现内存错误。

if(faces[i].x>=0 && faces[i].y >= 0 && faces[i].x+faces[i].width<frame_gray.cols && faces[i].y+faces[i].height < frame_gray.rows)
{
faceROI=frame_gray(faces[i]);
}

相关内容

  • 没有找到相关文章

最新更新