【11】opencv像素统计
void minMaxLoc(InputArray src, CV_OUT double* minVal, CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0, CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
src:输入图像。
minVal:返回像素最小值。可输入NULL表示不需要。
maxVal :返回像素最大值。可输入NULL表示不需要。
minLoc:返回最小值的位置。可输入NULL表示不需要。
maxLoc:返回最大值的位置。可输入NULL表示不需要。
mask:可选项。
void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray());
src:输入图像。
mean:返回图像像素均值。
stddev:返回图像像素均差值。
mask:可选项。
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, const char* argv[]) { Mat src = imread("0003.jpg", IMREAD_GRAYSCALE); if (src.empty()) { printf("不能加载图片!\n"); return -1; } namedWindow("1--原图", WINDOW_AUTOSIZE); imshow("1--原图", src); double minVal, maxVal; Point minLoc, maxLoc; //查找图像中像素最小值最大值及它们的位置,设置minLoc maxLoc为point类型 minVal, maxVal为double类型 minMaxLoc(src, &minVal, &maxVal, &minLoc, &maxLoc, Mat()); printf("min: %.2f, max: %.2f \n", minVal, maxVal); printf("min location: (%d, %d) \n", minLoc.x, minLoc.y); printf("max location: (%d, %d) \n", maxLoc.x, maxLoc.y); src = imread("0003.jpg"); Mat means, stddev; meanStdDev(src, means, stddev); //计算:彩色图像三通道的均值与方差 mean:返回图像像素均值 stddev:返回图像像素均差值 printf("Channel--[Blue] mean: %.2f, stddev: %.2f\n", means.at<double>(0, 0), stddev.at<double>(0, 0)); printf("Channel--[Green] mean: %.2f, stddev: %.2f\n", means.at<double>(1, 0), stddev.at<double>(1, 0)); printf("Channel--[Red] mean: %.2f, stddev: %.2f\n", means.at<double>(2, 0), stddev.at<double>(2, 0)); waitKey(0); return 0; }
需要记忆:
means.at<double>(0, 0), stddev.at<double>(0, 0));
means.at<double>(1, 0), stddev.at<double>(1, 0));
means.at<double>(2, 0), stddev.at<double>(2, 0));
返回像素均值与图像像素均差值的方法
需要注意:
double minVal, maxVal; Point minLoc, maxLoc;
在函数中用取地址符号&,minLOc类型这样的搞.x.y
而且,传入的图像必须是黑白的灰度图。

浙公网安备 33010602011771号