OpenCV计算图像的平均值和标准差的函数meanStdDev函数的使用
計算一個矩陣的平均值和標準差,每個通道都是獨立的,通過以下輸出參數獲取返回值:
[N=∑I,mask(I)≠01meanc=∑I:mask(I)≠0src(I)cNstddevc=∑I:mask(I)≠0(src(I)c?meanc)2N][\begin{array}{l} N = \sum _{I, \texttt{mask} (I) \ne 0} 1 \\ \texttt{mean} _c = \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c = \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c - \texttt{mean} _c \right )^2}{N}} \end{array}] [N=∑I,mask(I)?=0?1meanc?=N∑I:mask(I)?=0?src(I)c??stddevc?=N∑I:mask(I)?=0?(src(I)c??meanc?)2???]
當所有的mask元素是0的時候,函數返回mean=stddev=Scalar::all(0).
注意:計算出的標準差只能是完全歸一化協方差矩陣,如果需要完整的矩陣,你可以reshape多通道數組M x N到單通道矩陣M*N x mtx.channels() (只有在矩陣是連續的時候才有可能)并且把矩陣傳遞給calcCovarMatrix
功能:
表示一個圖像的明暗變化程度,標準差越大,明暗變化越明顯。
原型:
CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,InputArray mask=noArray());參數釋義:
- 參數 src 輸入數組,由1-4個通道組成,能夠把結果存儲到Scalar里
- 參數 mean 輸出參數,計算平均值。
- 參數 stddev 輸出參數,計算出的標準差
- 參數 mask 可選參數,操作掩摸,用以標記求取哪些區域。
參考:countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
示例源碼:
#include <iostream> #include <opencv2/opencv.hpp>int main() {float sample[14] = { 12,12,3,4,7,9,56,12,13,14,12,56,34,14 };cv::Mat image1 = cv::Mat(4, 3, CV_32FC1, sample); //單通道的矩陣cv::Mat image2 = cv::Mat(2, 2, CV_32FC2, sample); //多通道的矩陣cv::Scalar mean1;cv::Scalar mean2;cv::Mat stddevMat;cv::Mat stddevMatM;cv::meanStdDev(image1, mean1, stddevMat);cv::meanStdDev(image2, mean2, stddevMatM);//mean2 = cv::mean(image2);std::cout << "單通道標準差:" << stddevMat << std::endl;std::cout << "多通道標準差:" << stddevMatM << std::endl;return 0; }輸出結果:
總結
以上是生活随笔為你收集整理的OpenCV计算图像的平均值和标准差的函数meanStdDev函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV学习之Scalar数据类型
- 下一篇: OPenCV膨胀函数dilate()的使