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 回答