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);


}

person Ahmed    schedule 15.05.2014    source источник
comment
Если раньше он работал нормально, я сомневаюсь, что код решил пойти и сломать себя. Все ли зависимости установлены и настроены правильно? Вы уверены, что haarcascade_frontalface_alt.xml правильно отформатирован? Библиотека могла быть обновлена ​​с тех пор, как вы в последний раз использовали свой код; когда он раньше нормально работал?   -  person Sveltely    schedule 15.05.2014
comment
haarcascade_frontalface_alt.xml предоставляется самим opencv, и у меня все еще есть та же версия opencv   -  person Ahmed    schedule 15.05.2014
comment
Хорошо, какую версию OpenCV вы используете? Что произойдет, если вы попытаетесь поймать исключение opencv или что-то в этом роде?   -  person Sveltely    schedule 15.05.2014
comment
2.4.8... программа не переходит в блок catch, если я пытаюсь перехватить cv::Exception   -  person Ahmed    schedule 15.05.2014
comment
Будьте осторожны, если вы используете 2.4.8.1, 2.4.8.2, (fro git) они только для теста, и они сильно давят   -  person thedarkside ofthemoon    schedule 15.05.2014
comment
В любом случае, что здесь означает остановка? Вы можете опубликовать также сообщение об ошибке или дроблении?   -  person thedarkside ofthemoon    schedule 15.05.2014


Ответы (1)


Следующие модификации заставили программу работать корректно (странно) Предыдущий код:

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


Заменено на :

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

Раньше я загружал xml-файл в конструктор (до сих пор не знаю, почему это произошло), но теперь он работает.

person Ahmed    schedule 20.05.2014
comment
Это старая тема, но это глупо. Добавление двойной косой черты сработало для меня. - person luckyging3r; 23.03.2017