修改Open CV视频检测教程

时间:2013-02-24 21:23:43

标签: c++ opencv

我是一个新的开放简历,只是做一些实验与教程,以便找出有关该库的用法和功能的一些信息,在已经放置在Open CV官方的教程之一网站上有一段代码,用于检测网络摄像头上某些训练面孔和面部预测,Face Recognition in videos

现在我正在尝试修改代码,以便使用本地数据库中保存的图片,并在检测到的面上给出相同的输出矩形和上面的标签,我修改了代码(在第88行之后)以这种方式教程中提到的代码:

CascadeClassifier haar_cascade;
haar_cascade.load(fn_haar);

for(;;) {

    Mat gray;
    Mat original;
    gray = imread("F:\datasets\23.jpg",0);
    original = imread("F:\datasets\23.jpg");
    vector< Rect_<int> > faces;
    haar_cascade.detectMultiScale(gray, faces);
    for(int i = 0; i < faces.size(); i++) {   
        Rect face_i = faces[i];
        Mat face = gray(face_i);
        Mat face_resized;
        cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC);

        // predict:
        int prediction = model->predict(face_resized);

        // visualize:
        rectangle(original, face_i, CV_RGB(0, 255,0), 1);
        string box_text = format("Prediction = %d", prediction);
        int pos_x = std::max(face_i.tl().x - 10, 0);
        int pos_y = std::max(face_i.tl().y - 10, 0);
        putText(original, box_text, Point(pos_x, pos_y), FONT_HERSHEY_PLAIN, 1.0, CV_RGB(0,255,0), 2.0);
    }
    // Show the result:
    imshow("face_recognizer", original);
    // And display it:
    char key = (char) waitKey(20);
    // Exit this loop on escape:
    if(key == 27)
        break;
}

但是当我执行代码时,它报告“未知函数中的OpenCV错误:错误标志(参数或结构字段)(无法识别或不支持的数组类型)”任何人都可以帮助我解决并解决代码中的错误请?

1 个答案:

答案 0 :(得分:3)

调整您的图片路径,应为"F:\\datasets\\23.jpg" or "F:/datasets/23.jpg"

(文件名中的单个反斜杠有些问题,使用2或避免它们)

对于未来,错误是空的或无效的垫子的症状,所以检查你加载的任何ressource是必须的。像:

gray = imread("F:/datasets/23.jpg",0);
if ( gray.empty() )
{
    cerr << "could not load it!";
    return -1;
}

级联相同:

if ( ! haar_cascade.load(fn_haar) )
{
    //...
}