我正在尝试使 FisherFaceRecognizer 的 predict() 方法工作,但我不断收到错误
错误的参数(给定矩阵的形状错误。大小(src)=(1,108000),大小(W)=(36000,1)。)在 subspaceProject,文件 /tmp/opencv-DCb7/OpenCV-2.4.3/模块/contrib/src/lda.cpp,第 187 行
这类似于在 OPENCV 中给定矩阵的错误形状中提出的问题, 但在我的情况下,源图像和训练图像都是相同的数据类型,全彩色。
我的代码改编自http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html#fisherfaces上的教程
但是,我的测试图像比训练图像大,所以我需要在正确大小的感兴趣区域 (ROI) 上工作。
这是我阅读图像和转换尺寸的方式。我克隆了 ROI 矩阵,因为较早的错误消息告诉我目标矩阵必须是连续的:
vector<Mat> images;
images.push_back( cvLoadImage( trainingList[i].c_str()));
IplImage* img;
img = cvLoadImage( imgName.c_str() );
// take ROI and clone into a new Mat
Mat testSample1(img, Rect( xLoc, yLoc, images[0].cols, images[0].rows));
Mat testSample = testSample1.clone();
// Create a FisherFaceRecognizer in OpenCV
Ptr<FaceRecognizer> FFR = createFisherFaceRecognizer(0,DBL_MAX);
model->train(images, labels);
cout << " check of data type testSample is " << testSample.type() << " images is " << images[0].type() << endl;
int predictedLabel = model->predict(testSample);
//
我在预测语句中收到异常消息。
cout 语句告诉我两个矩阵都有类型 16,但不知何故它仍然不相信矩阵的大小和数据类型相同......