检测到面部并对其应用模糊时出错

时间:2016-09-12 16:52:52

标签: c++ opencv ubuntu

我正在创建一个应用程序,通过网络摄像头捕获视频流并检测面部并模糊它们

这是我的代码

#include <iostream>
#include <vector>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/objdetect/objdetect.hpp>
using namespace std;
using namespace cv;



    int blur_value = 50;
    Mat src; Mat dst;


int main(int argc, char* argv[])
{
    VideoCapture cap(0);
    bool read = true;
    char winName[] = "Blured WebCam";
    String face_cascade_name = "haarcascade_frontalface_alt.xml";
    CascadeClassifier face_cascade;


    if(!cap.isOpened())
    {
        cout<<"Error while opening your webcam\n";
        return 0;
    }

    for(;;)
    {
        cap.read(src);
        vector <Rect> faces;
        Mat blk;
        cvtColor( src, blk, COLOR_BGR2GRAY );
        equalizeHist( blk, blk );

        face_cascade.detectMultiScale( blk, 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/2, faces[i].y + faces[i].height/2 );

             blur( src, dst, Size( faces[i].width/2, faces[i].height/2), Point(-1,-1) );


        }


        imshow(winName, dst);

        switch(waitKey(10))
        {
        case 27:
            return 0;
        }


    }


    return 0;
}

编译过程中没有错误,当我尝试运行应用程序时出现错误

我收到了这个错误

  

OpenCV错误:断言失败(size.width&gt; 0&amp;&amp; size.height&gt; 0)in   imshow,文件   /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp,   第269行终止在抛出一个实例后调用   'cv :: Exception'what():   /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp:269:   错误:(-215)size.width&gt; 0&amp;&amp;函数imshow中的size.height&gt; 0

     

中止(核心倾销)

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

当没有检测到面部时,您可能会收到该错误。如果在空帧上调用imshow,则会出错。试试@miki建议的

if(!faces.empty()) {
  imshow(winName, dst);
}