1

OpenCV エラー: 引数が正しくありません (空のトレーニング データが指定されました。モデルを学習するには、複数のサンプルが必要です。) トレーニング中、ファイル C:/slave/WinInstallerMegaPack/src/opencv/modules/contrib/src/facerec.cpp 、316行目

以下のプログラムを実行しようとすると、上記のエラーが発生します。私の意図は、いくつかの入力画像を提供し、opencv の機能を確認することtrain()ですpredict()。以下のコード スニペットに何か問題がありますか?

int main(int argc, char* argv[]) {

    const char * trainImage[6] = { "c:\\train\\00000000.jpg", "c:\\train\\00000001.jpg", "c:\\train\\00000002.jpg", "c:\\train\\00000003.jpg", "c:\\train\\00000004.jpg", "c:\\train\\00000005.jpg" };

    int imglabel[6] = {1, 2, 3, 4, 5, 6};        
    vector<Mat> img = vector<Mat>();
    vector<int> label = vector<int>();

    for (int i = 0; i >= 5; i++) {
        img.push_back(imread(trainImage[i], 0));
        label.push_back(imglabel[i]);
    }

    Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
    model->train(img, label);
    model->save("c:\\train\\file.yaml");

    // Testing...
    model->load("c:\\train\\file.yaml");
    Mat testsample = imread("c:\\test\\00000000.jpg", -1);

    int PredictLabel = -1;
    double confidence = 0.0;

    model->predict(testsample, PredictLabel, confidence);
    cout << PredictLabel;
    return 0;

}
4

1 に答える 1

2

ラベルごとにより多くのトレーニング サンプルを提供します。

ドキュメントのコード サンプルを参照してください。

// images for first person
images.push_back(imread("person0/0.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0);
images.push_back(imread("person0/1.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0);
images.push_back(imread("person0/2.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0);
// images for second person
images.push_back(imread("person1/0.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1);
images.push_back(imread("person1/1.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1);
images.push_back(imread("person1/2.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1);

また、forループ条件が間違っています:

for (int i = 0; i <= 5; i++)

テスト画像はグレースケールでロードする必要があります:

Mat testsample = imread("test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
于 2012-11-01T11:35:44.117 に答える