【问题标题】:PCACompute Opencv return eigenvectors = 0PCACompute Opencv 返回特征向量 = 0
【发布时间】:2012-02-02 10:53:34
【问题描述】:

Android Opencv2.3.1 中的 PCACompute 存在这个问题,因为当我调用 PCACompute 时,我的特征向量都是 0。所以,我为每个人拍摄 10 张照片,并将其保存到 100X100 的垫子中。 之后,我使用以下代码将我的 100X100 Mat 转换为一个 Mat 1X10000:

double [] elem = null; 
 for(int riga=0;riga<m.rows();riga++)
  {
   for(int colonna=0;colonna<m.cols();colonna++)
   {
    elem = m.get(riga, colonna);
      mrow.put(0,((riga*100)+colonna), elem[0]);
    }//for colonna
 }//for riga

之后,当我拍摄 10 张照片时,我使用以下代码将所有照片的垫子插入一张垫子:

double b[] = null;
  for (int i = 0; i< listafoto.size(); i++)
   {
    Mat t = listafoto.get(i);
      for(int riga = 0;riga<t.rows();riga++)
       {
        for(int colonna =0;colonna<t.cols();colonna++)
        {
           b = t.get(riga, colonna);
           datiOriginali.put(i, colonna, b[0]);
        }//for colonna
    }//for riga
 }//for lista e contemporaneamente riga datiOriginali

之后,我使用以下代码调用 PCACompute:`

 org.opencv.core.Core.PCACompute(datiOriginali,mean, eigenvectors, 10);`

所以,datiOriginali 是 10 行和 10000 列的输入 Mat,均值和特征向量是输出矩阵。均值矩阵给我一个结果,但特征向量给我全0。你能帮我解决这个问题吗? 提前致谢。MArco

【问题讨论】:

    标签: android opencv pca


    【解决方案1】:

    我的代码基于http://www.bytefish.de/blog/pca_in_opencv 的示例。 我是这样做的:

        Vector trainingImages = new Vector();;
        trainingImages.add(Highgui.imread("/sdcard/facedatabase/s1/1.pgm",0));
        trainingImages.add(Highgui.imread("/sdcard/facedatabase/s1/2.pgm",0));
    
        Mat x = (Mat) trainingImages.get(0);
        int total = x.rows() * x.cols();
    
        // build matrix (column)
        // This matrix will have one col for each image and imagerows x imagecols rows
            Mat mat = new Mat(total, trainingImages.size(), CvType.CV_32FC1);
            for(int i = 0; i < trainingImages.size(); i++) {
                Mat X = mat.col(i);
                Mat c = (Mat) trainingImages.get(i);
                c.reshape(1,total).convertTo(X, CvType.CV_32FC1);
            }
    
        Mat eigenVectors = new Mat();
        Mat mean = new Mat();
        Core.PCACompute(mat, mean, eigenVectors);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多