0

我是一些如何打开 CV 的新手,只是对教程进行了一些实验,以了解有关该库的使用和功能的一些信息,在已经放置在 Open CV 官方网站上的教程之一中,有是一段代码,它是关于检测一些训练有素的人脸和预测网络摄像头上的人脸,视频中的人脸识别

现在我正在尝试修改代码,以便使用本地数据库中保存的图片,并在检测到的面部和上面的标签上给出相同的输出,我已经修改了代码(在提到的代码的第 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 Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in unknown function”任何人都可以帮我解决这个问题来检测和解决代码中的错误吗?

4

1 回答 1

3

在那里调整你的图像路径,应该是"F:\\datasets\\23.jpg" or "F:/datasets/23.jpg"

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

对于未来,该错误是空垫子或无效垫子的症状,因此对您加载的任何资源进行检查是必须的。像:

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

级联相同:

if ( ! haar_cascade.load(fn_haar) )
{
    //...
} 
于 2013-02-24T21:49:25.173 回答