OpenCV的逐列标准偏差

  • 本文关键字:标准 OpenCV opencv mean
  • 更新时间 :
  • 英文 :


是否有一种直接的方法来计算opencv中矩阵的列标准偏差?类似于Matlab中的std。我已经找到了一个平均值:

cv::Mat col_mean;
reduce(A, col_mean, 1, CV_REDUCE_AVG);

但是我找不到标准偏差的函数

这里是您正在寻找的快速答案。我把每一列的标准差和平均值都加了起来。可以很容易地为行修改代码。

    cv::Mat A = ...; // FILL IN THE DATA FOR YOUR INPUT MATRIX
    cv::Mat meanValue, stdValue;
    cv::Mat colSTD(1, A.cols, CV_64FC1);
    cv::Mat colMEAN(1, A.cols, CV_64FC1);       
    for (int i = 0; i < A.cols; i++){           
        cv::meanStdDev(A.col(i), meanValue, stdValue);
        colSTD.at<double>(i) = stdValue.at<double>(0);
        colMEAN.at<double>(i) = meanValue.at<double>(0);
    }

下面的代码不是在一行中,而是另一个没有循环的版本:

    reduce(A, meanOfEachCol, 0, CV_REDUCE_AVG); // produces single row of columnar means
    Mat repColMean; 
    cv::repeat(meanOfEachCol, rows, 1, repColMean); // repeat mean vector 'rows' times
    Mat diffMean = A - repColMean; // get difference
    Mat diffMean2 = diffMean.mul(diffMean); // per element square
    Mat varMeanF;
    cv::reduce(diffMean2, varMeanF, 0, CV_REDUCE_AVG); // sum each column's elements to get single row
    Mat stdMeanF;
    cv::sqrt(varMeanF, stdMeanF); // get standard deviation

相关内容

  • 没有找到相关文章

最新更新