2016-09-12 4 views
0

Ich erstelle eine Anwendung, die Capture-Video-Stream via Webcam und die Gesichter erkennen und verwischen sieFehler beim Gesichter zu erfassen und anwenden Blur auf sie

Und dies ist mein Code

#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; 
} 

Es gibt keine Fehler in der Übersetzungsvorgang, kommt der Fehler in, wenn ich versuche, die Anwendung

ich habe diesen Fehler

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp, line 269 terminate called after throwing an instance of 'cv::Exception' what(): /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow

Aborted (core dumped)

zu laufen

Wo ist das Problem?

+0

Die Behauptung sagt Ihnen, was das Problem ist. Verwenden Sie einen Debugger und führen Sie ihn zurück. –

+3

Wenn Sie beim ersten Bild kein Gesicht bekommen, wird 'dst' nicht initialisiert und Ihre' imshow' schlägt fehl, weil Sie ein leeres Bild zeigen. Wenn 'faces.empty()' 'sollte' src' angezeigt werden, oder passen Sie Ihre Logik an – Miki

Antwort

0

Sie erhalten wahrscheinlich diesen Fehler, wenn keine Gesichter erkannt werden. Wenn imshow bei leerem Rahmen aufgerufen wird, wird ein Fehler ausgegeben. Versuchen Sie dies, wie @miki vorgeschlagen hat

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