C++ Opencv像素值统计

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

API

1.最大最小值minMaxLoc

函数原型:

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);

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

说明:
1 minMaxLoc寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置.
2 参数若不需要,则置为NULL或者0,即可.
3 minMaxLoc针对Mat和MatND的重载中 ,第5个参数是可选的(optional),不使用不传递即可.

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

2.计算均值与标准方差meanStdDev

void meanStdDev(InputArray src,OutputArray mean, OutputArray stddev, InputArray mask=noArray())

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

Point类的介绍请参考这里

	Mat image = imread("C:/Users/86156/Pictures/Saved Pictures/cwt.jpg");
	double minv, maxv;
	Point minLoc, maxLoc;

	std::vectormv;
	split(image, mv);
	for (int i = 0; i < mv.size(); i++) {
		minMaxLoc(mv[i], &minv, &maxv, &minLoc, &maxLoc, Mat());  //minMaxLoc只能用于单通道
		cout << "N0.channels:" << i <<" min value:" << minv << " max value:" << maxv << endl;
	}	
	Mat mean, stddev;
	meanStdDev(image, mean, stddev);
	cout << "mean value:" << mean << endl;
	cout << "stddev value:" << stddev << endl;

C++ Opencv像素值统计_第1张图片

你可能感兴趣的:(Opencv(C++),c++,opencv,算法)