Search code examples
c++opencvpca

1.#QNAN error in OpenCV PCA


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


Solution

  • Your matrices are float type, but you trying to assign them double array data.