I'm trying to dimensionality reduction with OpenCV 3.0.0 by PCA. When the code running I get a vector with -1.#QNAN values. What am I doing wrong?
//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;
}
The output is below:
Project Original Data: 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
Your matrices are float type, but you trying to assign them double array data.