1、概述 案例:使用OpenCV输出图片的均值和标准差以及协方差矩阵 相关定义: 1。均值:平均值,指讲一个数据集合中的值相加再除以数据集中数据的个数得出的值 2。方差:数据集中每个样本值与全体样本值的平均数之差的平方值的平均数 3。标准差:标准差是方差的算数平方根(ps:定义参考方差) 4。协方差:在概率论和统计学中用于衡量两个变量的总体误差 函数定义:均值及标准差:voidmeanStdDev(InputArraysrc,OutputArraymean,OutputArraystddev,InputArraymasknoArray());1。src:输入图像2。mean:输出参数均值3。stddev:输出参数标准差协方差矩阵、均值矩阵 voidcalcCovarMatrix(InputArraysamples,OutputArraycovar,InputOutputArraymean,intflags,intctypeCV64F); samples:输入数据,一般channgle1 covar:输出参数表示协方差矩阵 mean:输出参数表示,均值矩阵 flags:操作标志:CVCOVARSCRAMBLED,CVCOVARNORMAL,CVCOVARUSEAVG,CVCOVARSCALE,CVCOVARROWS,CVCOVARCOLS。2、代码演示 QT开发交流赀料君羊:714620761FaceMeansCovar::FaceMeansCovar(QWidgetparent):MyGraphicsView{parent}{thissetWindowTitle(计算Mat均值、标准差、及协方差);QLabellabelTitlenewQLabel(this);labelTitlesetText(输出结果如下:);均值QLabellabelMeansTitlenewQLabel(this);labelMeansTitlesetText(均值:);labelMeansTitlemove(0,labelTitley()labelTitleheight()10);labelMeansValuenewQLabel(this);labelMeansValuesetFixedWidth(150);labelMeansValuemove(labelMeansTitlex()labelMeansTitlewidth()10,labelMeansTitley());标准差QLabellabelStddevTitlenewQLabel(this);labelStddevTitlesetText(标准差:);labelStddevTitlemove(0,labelMeansTitley()labelMeansTitleheight()10);labelStddevValuenewQLabel(this);labelStddevValuesetFixedWidth(150);labelStddevValuemove(labelStddevTitlex()labelStddevTitlewidth()10,labelStddevTitley());协方差QLabellabelCovarTitlenewQLabel(this);labelCovarTitlesetText(协方差:);labelCovarTitlemove(0,labelStddevTitley()labelStddevTitleheight()10);labelCovarValuenewQLabel(this);labelCovarValuesetFixedWidth(150);labelCovarValuemove(labelCovarTitlex()labelCovarTitlewidth()10,labelCovarTitley());}voidFaceMeansCovar::dropEvent(QDropEventevent){patheventmimeData()urls()。at(0)。toLocalFile();qDebug()文件路径:path;showMeansAndCovar(path。toStdString()。cstr());}voidFaceMeansCovar::showMeansAndCovar(constcharfilePath){Matsrcimread(filePath);if(src。empty()){qDebug()图片文件为空;return;}imshow(src,src);计算图像均值以及标准差Matmeans,stddev;meanStdDev(src,means,stddev,noArray());输出均值矩阵,图像有多少通道means就有多少个值。例如:三通道图像,则有第一通道的均值,第二通道的均值,第三通道的均值coutmeansendl;输出标准差矩阵,图像有多少个通道stddev就有多少个值。例如:单通道图像,则0的位置就是通道标准差coutstddevendl;计算所有通道的平均值doubleresultMeans0。0;for(inti0;imeans。rows;i){resultMeansmeans。atdouble(i);qDebug()均值:means。atdouble(i);}QStringrMeansQString(1)。arg(resultMeans3);labelMeansValuesetText(rMeans);计算所有通道的标准差doubleresultStddev0。0;for(inti0;istddev。rows;i){resultStddevstddev。atdouble(i);qDebug()标准差:stddev。atdouble(i);}QStringrStddevQString(1)。arg(resultStddev3);labelStddevValuesetText(rStddev);计算协方差Matcovar,means2;cvtColor(src,src,COLORBGR2GRAY);这里的输入需要是单通道的channgle1calcCovarMatrix(src,covar,means2,COVARNORMALcv::COVARROWS);qDebug()以下是协方差矩阵;一定要搞一个小一点的图测试coutcovarendl;coutmeans2endl;}3、示例图片