2014-05-15 1 views
0

이전에는 문제 없었던 얼굴 및 눈 탐지를위한 코드를 작성했지만 현재는 문제가있어 프로그램에 문제가 발생하여 프로젝트가 작동을 멈춘다는 메시지가 표시됩니다. 다음 코드에서 모양과 주석 행 번호는 문제가있는 프로그램은Open CV Haarcascades가 제대로 작동하지 않습니다.

#include <opencv2/core/core.hpp> 
#include "opencv2/objdetect/objdetect.hpp" 
#include <opencv2/highgui/highgui.hpp> 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 
int main() 
{ 

    /*Mat image=imread("im.jpg"); 
    namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display. 
    imshow("Display window", image);     // Show our image inside it. 
    //imwrite("im2.jpg",image);// write the image stored in object image as im2.jpg 
    waitKey(0);           // Wait for a keystroke in the window 
    return 0;*/ 

    /*VideoCapture capture; 
    Mat frame; 
    capture.open(0); 
    if(capture.isOpened()) 
    { 
     cout<<"success"<<endl; 
     while(1) 
     { 
      bool flag=capture.read(frame); 
      namedWindow("Display window", WINDOW_AUTOSIZE); 
      if(flag) 
       imshow("Display window", frame); 
      else 
       cout<<"failed"; 
      waitKey(300); 
     } 

    }*/ 
    //face detection 


    cout<<"i'm here"; 
    CascadeClassifier face_cascade("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"); 
    CascadeClassifier eye_cascade("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml"); 
    Mat image=imread("subject3.jpg"); 
    cout<<"i'm here"; 
    Mat res; 
    resize(image, res, Size(800, 600), 0, 0, INTER_LINEAR); 
    Mat gray; 
    cvtColor(res,gray,COLOR_BGR2GRAY); 
    equalizeHist(gray, gray); 
    std::vector<Rect> faces; 
    std::vector<Rect> eyes; 
    face_cascade.detectMultiScale(gray,faces, 1.1, 2,0 | CASCADE_SCALE_IMAGE, Size(30, 30));//problem 
    Rect roi; 
    cout<<faces.size(); 
    Mat crop; 
    Mat grayEye; 
    for(int i=0;i<faces.size();i++) 
    { 
     cout<<"flag2"; 
     roi.x=faces[i].x; 
     roi.y=faces[i].y; 
     roi.width=faces[i].width; 
     roi.height=faces[i].height; 
     Point pt1(faces[i].x, faces[i].y); 
     Point pt2((faces[i].x + faces[i].height), (faces[i].y + faces[i].width)); 
     crop=res(roi); 
     resize(crop, crop, Size(300, 300), 0, 0, INTER_LINEAR); 
     cvtColor(crop, grayEye, CV_BGR2GRAY); 
     equalizeHist(grayEye, grayEye); 
     eye_cascade.detectMultiScale(grayEye,eyes, 1.1, 2,0 | CASCADE_SCALE_IMAGE, Size(30, 30)); 
     cout<<endl<<eyes.size(); 
     for(int j=0;j<eyes.size();j++) 
     { 
      Point pnt1(eyes[j].x, eyes[j].y); 
      Point pnt2((eyes[j].x + eyes[j].height), (eyes[j].y + eyes[j].width)); 
      rectangle(crop, pnt1, pnt2, Scalar(0, 255, 0), 2); 
     } 
     rectangle(res, pt1, pt2, Scalar(0, 255, 0), 2); 
    } 
    namedWindow("detected", WINDOW_AUTOSIZE); 
    imshow("detected",res); 
    waitKey(300); 
    imshow("detected",crop); 
    waitKey(0); 


} 
+0

"이전에 잘 돌아갔다"면 코드가 자체적으로 작동하지 않기로 결정했습니다. 모든 종속성을 올바르게 설치하고 구성 했습니까? 'haarcascade_frontalface_alt.xml'이 올바르게 포맷 되었습니까? 마지막으로 코드를 사용한 이후로 라이브러리가 업데이트되었을 수 있습니다. 이전에 잘 작동 했습니까? – Sveltely

+0

haarcascade_frontalface_alt.xml은 opencv에 의해 제공되며 나는 여전히 opencv와 동일한 버전을 가지고 있습니다 – Ahmed

+0

글쎄, 어떤 OpenCV 버전을 사용하고 있습니까? opencv 예외를 잡으려고하면 어떻게됩니까? – Sveltely

답변

0

다음과 같이 수정이 제대로 (이상한) 작업 할 수있는 프로그램 이전 코드가 만들어진 중지하십시오

CascadeClassifier face_cascade("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"); 

내가 이전에 생성자에서 XML 파일을로드하는

CascadeClassifier face_cascade; 
face_cascade.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"); 

(이 일어난 이유를 아직도 모른다) 그러나 지금 노력하고 있습니다 : 함께 대체되었습니다.

+0

이것은 오래된 스레드이지만 그것은 바보입니다. 이중 슬래시를 추가하면 나를 위해 일했습니다. – luckyging3r

관련 문제