2017-07-10 4 views
0

Ich habe diesen Code von opencv Website gefunden und es ausprobiert. Ich habe dieses Problem, in dem detectAndDisplay eine Fehlermeldung, unvollständigen Typ zeigt ist nicht erlaubt, CascadeClassifier ist kein Typname, CvCapture ist nicht definiert und so weiter ... Wie löse ich diese FehlerGesichtserkennung zum Entsperren der Tür

#include "C:\opencv\build\include\opencv\objdetect.hpp" 
#include "C:\opencv\build\include\opencv2\highgui.hpp" 
#include "C:\opencv\build\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 = "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(-1);  
    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); 
} 
+0

Wo ist 'CascadeClassifier' definiert? – doctorlove

Antwort

0

Sie Windows verwenden?

Wenn Sie die erste Zeile sind sollte #include "C: \ opencv \ build \ include \ opencv2 // objdetect.hpp" Ich denke (mit doppelten Schrägstrichen vor objdetect.hpp). Dies sollte das Problem mit CascadeClassifier lösen können.

Wie für das CvCapture-Problem, welche Version von OpenCV verwenden Sie? Ich bin mir ziemlich sicher, dass es nicht mehr unterstützt wird, wenn Sie die neuesten Versionen (3.0 oder höher) verwenden, und ich bin mir nicht sicher, ob es noch in den älteren Versionen verfügbar ist. Siehe hierzu What is the difference between the CvCapture structure and the VideoCapture structure?.

Ich würde vorschlagen, stattdessen VideoCapture http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture (sieht aus wie OpenCV 2.4 unterstützt nicht auch CvCapture). Sie sind ziemlich genau dasselbe und ich benutze VideoCapture gerade jetzt, also sollte es gut funktionieren!

+0

Oh. Ich benutze derzeit Version 2.4.9 von opencv und die kleinen Fehler wurden gelöscht. Ich werde versuchen, VideoCapture zu verwenden, und wenn, wenn es funktioniert, wäre es großartig. Vielen Dank!!! – james