我有一些与特征脸识别步骤的理解问题,我读过的地方,我们必须将测试图像投影到本征空间,然后计算投影图像测试和存储的投影矢量。人脸识别步骤:项目测试图像
// READ THE STORED LEARN DATA
FileStorage fs("test.xml", FileStorage::READ);
Mat stored_mean, stored_eigenvalues, stored_vectors, stored_projections, stored_labels;
int stored_num_componants = fs["num_components"];
fs["mean"] >> stored_mean;
fs["eigenvalues"] >> stored_eigenvalues;
fs["eigenvectors"] >> stored_vectors;
fs["projections"] >> stored_projections;
fs["labels"] >> stored_labels;
// PROJECT THE TEST IMAGE
Mat result;
pca.project(testImageInGrayScale, result); // bugs here ...
// PRINT THE DISTANCES
for (int i = 0; stored_projections.rows; ++i){
qDebug() << norm(stored_projections.row(i),weightVect);
}
错误代码是:
OpenCV Error: Assertion failed (mean.data && eigenvectors.data && ((mean.rows == 1 && mean.cols == data.cols) || (mean.cols == 1 && mean.rows == data.rows))) in project, file c:/opencv/sources/modules/core/src/matmul.cpp, line 3042
我是完全以错了吗?或者我刚刚使用了错误的方法和错误的类型?
这不是一个关于你所使用的类型的问题,但是这样你的数据进行格式化。看看错误信息:你是否有数据进入mean变量,是否意味着等于1的行,依此类推。在这里和那里几个断点,你会知道发生了什么。这里的例子可能会帮助https://github.com/Itseez/opencv/blob/master/samples/cpp/pca.cpp – CTZStef