opencv의 EigenFacesRecognizer가 반환하는 고유 공분산 행렬에 이미지를 투영하려고합니다. 다음 코드를 사용하여 이미지를로드하고 샘플 이미지를 pca 하위 영역에 투영하려고하는 eigenfaces 매개 변수를로드합니다.매트 행렬 곱하기 문제
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.t을 뉴을 계산하려고 할 때부터 뉴 매트에 서 (1x3600 * 3600x1)는 같은 문제를 반환합니다. 재 형성 기능 때문에 문제가 있습니까 ?? 내 샘플 매트를 벡터로 변형하려고 시도하고 있지만 작동하는 것처럼 보이지만 nu_transposed로 nu를 곱하지 않는 이유를 이해할 수 없습니다.
나는 convMat과 동일하게 작동합니다. 감사합니다! –