1. OpenCV PCA中的#QNAN错误

时间:2016-04-27 03:33:47

标签: c++ opencv pca

我正在尝试通过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

1 个答案:

答案 0 :(得分:2)

您的矩阵是浮点类型,但您尝试为它们分配双数组数据。