2
我在尝试将图像投影到opencv的EigenFacesRecognizer返回的特征脸协方差矩阵。我使用下面的代码来加载载入图像的eigenfaces参数并尝试将样本图像投影到pca子空间。Mat矩阵相乘的问题
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->load("eigenfaces.yml"); // Load eigenfaces parameters
Mat eigenvalues = model->getMat("eigenvalues"); // Eigen values of PCA
Mat convMat = model->getMat("eigenvectors"); //Convariance matrix
Mat mean = model->getMat("mean"); // Mean value
string path = fileName;
Mat sample ,pca_ed_sample;
sample = imread(path, CV_LOAD_IMAGE_GRAYSCALE); //size 60x60
Mat nu = sample.reshape(1,3600).t(); //1x3600
pca_ed_sample = (nu - mean)*(convMat);
我保持5个特征向量,特征值这么5X1的大小,convMat3600x5意味着1x3600。当我试图计算pca_ed_sample它返回我:
cv::Exception at memory location 0x0011d300.Dimensionality reduction using default opencv eigenfaces...
OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type ==
CV_64FC1 || type == CV_32FC2 || type == CV_64FC2)) in unknown function, file .\
src\matmul.cpp, line 711`
问题矗立在NU垫,因为当我试图计算NU * .nu.t();(1x3600 * 3600x1)返回相同的问题。我是否因重塑功能而有麻烦?我试图将我的示例垫转换为矢量,它似乎工作,但我不明白为什么我甚至不能将nu与nu_transposed相乘。
我对convMat做了同样的工作,谢谢! –