我正在尝试通过PCA使用OpenCV 3.0.0降低维数。当代码运行时,我得到一个带有-1。#QNAN值的向量。我做错了什么?
//code
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
//data
double Coordinate[21]={1.5,2.3, 3.0,1.7,1.2,2.9,2.1,2.9,
3.1,2.6,5.2,2.4,6.1,8.0,8.6,9.2,1.0,2.0, 5.0,2.3,2.2
};
//print
void PrintMatrix(CvMat *Matrix,int Rows,int Cols){
for(int i=0; i<Rows; ++i){
for(int j=0; j<Cols; ++j){
printf("%3lf",cvGet2D(Matrix,i,j).val[0]);
}
printf("\n");
}
}
//main
int main()
{
CvMat *Vector1;
CvMat *AvgVector;
CvMat *EigenValue_Row;
CvMat *EigenVector;
Vector1 = cvCreateMat(7,3,CV_32FC1);
cvSetData(Vector1,Coordinate,Vector1->step);
AvgVector=cvCreateMat(1,3,CV_32FC1);
EigenValue_Row=cvCreateMat(3,1,CV_32FC1);
EigenVector=cvCreateMat(3,3,CV_32FC1);
cvCalcPCA(Vector1,AvgVector,EigenValue_Row,EigenVector,CV_PCA_DATA_AS_ROW);
cvProjectPCA(Vector1,AvgVector,EigenVector,Vector1);
printf("Project Original Data:\n");
PrintMatrix(Vector1,7,3);
return 0;
}
输出如下:
项目原始数据: 1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
1.#QNAN01。#QNAN0-1。#IND00
答案 0 :(得分:2)
您的矩阵是浮点类型,但您尝试为它们分配双数组数据。