1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C++ opencv之像素值统计(minMaxLoc meanStdDev)

C++ opencv之像素值统计(minMaxLoc meanStdDev)

时间:2019-12-17 04:54:31

相关推荐

C++ opencv之像素值统计(minMaxLoc meanStdDev)

一、引言

这篇博客的主要知识点为:像素值统计

最小(min)最大(max)均值(mean)标准方差(standard deviation)

API 的知识点为:

最大最小值minMaxLoc计算均值与标准方差meanStdDev

二、主要内容

主要有两个API函数:

2.1 minMaxLoc

2.1.1 函数原型

void minMaxLoc( const Mat& src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, const Mat& mask=Mat() ); void minMaxLoc(const MatND& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, const MatND& mask=MatND() ); void minMaxLoc(const SparseMat& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0);

2.1.2 参数解释

参数1:InputArray类型的src,输入单通道数组(图像)。参数2:double*类型的minVal,返回最小值的指针。若无须返回,此值置为NULL。参数3:double*类型的maxVal,返回最大值的指针。若无须返回,此值置为NULL。参数4:Point*类型的minLoc,返回最小位置的指针(二维情况下)。若无须返回,此值置为NULL。参数5:Point*类型的maxLoc,返回最大位置的指针(二维情况下)。若无须返回,此值置为NULL。参数6:InputArray类型的mask,用于选择子阵列的可选掩膜。

2.1.3几点说明:

1 minMaxLoc寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置.

2 参数若不需要,则置为NULL或者0,即可.

3 minMaxLoc针对Mat和MatND的重载中 ,第5个参数是可选的(optional),不使用不传递即可.

PS:minMaxLoc针对单通道图像,minMaxIdx则不限制(不过输出的坐标会变成三维)。

2.2 meanStdDev

计算矩阵的均值和标准偏差。

C++: void meanStdDev(InputArray src,OutputArray mean, OutputArray stddev, InputArray mask=noArray())Python: cv2.meanStdDev(src[,mean[, stddev[, mask]]]) → mean, stddevC: void cvAvgSdv(constCvArr* arr, CvScalar* mean, CvScalar* std_dev, const CvArr* mask=NULL )Python: cv.AvgSdv(arr,mask=None) -> (mean, stdDev)

src:输入矩阵,这个矩阵应该是1-4通道的,这可以将计算结果存在Scalar_ ‘s中mean:输出参数,计算均值stddev:输出参数,计算标准差mask:可选参数

三、代码演示

(注意我用的是release X64跑的)

#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv){Mat src = imread("C:/Users/Dell/Desktop/myself/caomei.jpg", IMREAD_GRAYSCALE);if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input", WINDOW_AUTOSIZE);imshow("input", src);double minVal; double maxVal; Point minLoc; Point maxLoc;minMaxLoc(src, &minVal, &maxVal, &minLoc, &maxLoc, Mat());printf("min: %.2f, max: %.2f \n", minVal, maxVal);printf("min loc: (%d, %d) \n", minLoc.x, minLoc.y);printf("max loc: (%d, %d)\n", maxLoc.x, maxLoc.y);// 彩色图像 三通道的 均值与方差src = imread("C:/Users/Dell/Desktop/myself/caomei.jpg");Mat means, stddev;meanStdDev(src, means, stddev);printf("blue channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(0, 0), stddev.at<double>(0, 0));printf("green channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(1, 0), stddev.at<double>(1, 0));printf("red channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(2, 0), stddev.at<double>(2, 0));waitKey(0);return 0;}

四、输出结果

我们的输入源图为:

在读取的时候转为了灰度图:

我们也打印了他的像素值数据:

这样我们就打印出来他的最小最大像素值还有均值和标准方差

这篇博客主要学习了这两个API函数。

加油吧 啊超没有蛀牙!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。