0

私は CV を開くのが初めてで、このライブラリの使用法と機能主義者に関する情報を把握するために、チュートリアルでいくつかの実験を行っているところです。すでに Open CV の公式 Web サイトに配置されているチュートリアルの 1 つです。いくつかの訓練された顔の検出とウェブカメラでの顔の予測、ビデオでの顔認識に関するコードの一部です

今、ローカルデータベースから保存された画像を使用し、検出された顔に長方形とその上にラベルを付けて同じ出力を与えるために、コードを変更しようとしています。コードを変更しました(前述のコードの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"

(ファイル名にバックスラッシュが 1 つあると問題が発生します。バックスラッシュを 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 に答える