网站风格模板,网上购物网站开发的背景,敬请期待用英语怎么说,网络结构有哪几种图像的高级处理中#xff0c;协方差矩阵计算是必不可少的#xff0c;但opencv关于这方面的资料却相当少。首先#xff0c;利用matlab计算一下#xff0c;便于比较#xff1a; data[1,2,3;10,20,30]data 1 2 310 20 30 convarcov(data)convar 40.5000 81.0…图像的高级处理中协方差矩阵计算是必不可少的但opencv关于这方面的资料却相当少。首先利用matlab计算一下便于比较 data[1,2,3;10,20,30]data 1 2 310 20 30 convarcov(data)convar 40.5000 81.0000 121.500081.0000 162.0000 243.0000121.5000 243.0000 364.5000在计算协方差矩阵时在源数据矩阵中默认以行为样本数以列为维度。如果你是相反的那么结果可能和我的不一样。在opencv2中先利用公式来进行计算代码Mat data (Mat_(2, 3) 1, 2, 3, 10, 20, 30);cout data:Mat means(1, data.cols, data.type(), Scalar::all(0));for (int i 0; i data.cols; i)means.col(i) sum(data.col(i)) / data.rows; //计算列均值cout means:Mat tmp repeat(means, data.rows, 1);data data - tmp; //源数据减去均值Mat covar (data.t()*data) / (data.rows - 1); //(X*X)/n-1cout covar:结果data:[1, 2, 3;10, 20, 30]means:[5.5, 11, 16.5]covar:[40.5, 81, 121.5;81, 162, 243;121.5, 243, 364.5]请按任意键继续. . .结果和matlab计算是一样的。还有一种比较简便的方法那就是使用opencv自带的函数calcCovarMatrix来计算。void calcCovarMatrix(InputArray samples, OutputArray covar, OutputArray mean, int flags, int ctypeCV_64F)代码Mat covar, means;Mat data (Mat_(2, 3) 1, 2, 3, 10, 20, 30);cout data: endl data calcCovarMatrix(data, covar, means, CV_COVAR_NORMAL| CV_COVAR_ROWS);cout means: endl means cout covar: endl covar endl;结果data:[1, 2, 3;10, 20, 30]means:[5.5, 11, 16.5]covar:[40.5, 81, 121.5;81, 162, 243;121.5, 243, 364.5]和上面的结果完全一样。注意最后一个参数CV_COVAR_ROWS表示以行为样本即一行为一个向量。如果你是以列为向量则应换成CV_COVAR_COLS标记位参数值极其意义标志参数的具体标志值意义CV_COVAR_NORMAL计算均值和协方差CV_COVAR__SCRAMBLED快速PCA”Scrambled”协方差CV_COVAR_USE_AVERAGE输入均值而不是计算均值CV_COVAR_SCALE重新缩放输出的协方差矩阵这个函数的具体介绍可以参考官方文档传送门