OpenCV矩阵按行求均值

              最近在做一个基于PCA的人脸识别系统JAVA版(系统具体过程后期会更博)时,发现OpenCV在求矩阵平均值时不能够像MATLAB那样得到我需要的结果。我自己在opencv的库上进行了扩展。下面将对两种工具求均值进行分析。

          1.MATLAB中的均值方法

>> A=[1 2 3;3 3 6;4 6 8;4 7 7];
>> mean(A)

ans =

    3.0000    4.5000    6.0000

>> mean(A,2)

ans =

     2
     4
     6
     6

>> 
  MATLAB中的均值方法为mean(A),其中mean(A)是按照矩阵的列求其平均值,最后形成一个1*N的行向量;mean(A,2)是按照矩阵的行求其平均值最后形成M*1的列向量。在这个PCA的人脸识别系统中我需要按行求训练矩阵的平均值时 MATLAB中就可以直接使用mean(A,2)返回值就是我需要的均值矩阵。

   但是在OpenCV中使用这个mean方法求解平均值时得到的结果跟我需要并不一样(本人是OpenCV新人,也许是因为我用的不对,如有知道的大神,请不吝赐教啊)。下面是我扩展的方法

      2.扩展OpenCV中的均值方法(JAVA版)

    

 /**
    * 矩阵按行求均值
    * @param mat
    * @return 返回行均值向量
    */
   public static Mat horizontalMean(Mat mat){
	   Mat meanVector=new Mat();
	   meanVector.create(mat.rows(),1,CvType.CV_64FC1);
	   //遍历mat矩阵
	   for (int i = 0; i < mat.rows(); i++) {
		   Mat rowRange = mat.rowRange(i,i+1);
		   Scalar mean = Core.mean(rowRange);
		   meanVector.put(i, 0,mean.val[0]);
	}
	   return meanVector;
   }
    这个做法其实很简单,只是将需要求解的行数据拿出来然后调用mean方法即可。当然这种方法在超高维矩阵时效率应该是很低,并不值得推广,本人也只是解燃眉之急。

你可能感兴趣的:(OpenCV矩阵按行求均值)