最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。
知识点: 像素值统计
API知识点
CV_EXPORTS_W 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());
参数一:输入单通道数组。
参数二:指向返回的最小值;如果不需要,则使用NULL。
参数三:指向返回的最大值;如果不需要,则使用NULL。
参数四:指向返回的最小位置(在2D情况下);如果不需要,则使用NULL。
参数五:指向返回的最大位置(在2D情况下);如果不需要,则使用NULL。
参数六:用于选择子数组的可选掩码。
功能:查找数组中的全局最小值和最大值及其位置。
CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,
InputArray mask=noArray());
参数一:输入数组应该有1到4个通道,以便结果可以存储在Scalar中。
参数二:输出参数:计算的平均值。
参数三: 输出参数:计算出的标准偏差。
参数四:可选的操作掩码。
功能:计算数组元素的平均值和标准差。
int main(int argc, char* argv[])
{
Mat src = imread("C:/Users/XMuser/Desktop/Opencv/test.png",IMREAD_GRAYSCALE);
if (src.empty())
{
printf("could not load image ...\n");
return -1;
}
double minVal, maxVal;
Point minLoc, 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);
//彩色图像 三通道 均值和方差
Mat means, stddev;
src = imread("C:/Users/XMuser/Desktop/Opencv/test.png");
meanStdDev(src, means, stddev);
printf("blue channel->> mean: %.2f, stddev: %.2f\n", means.at(0, 0), stddev.at(0, 0));
printf("green channel->> mean: %.2f, stddev: %.2f\n", means.at(1, 0), stddev.at(1, 0));
printf("red channel->> mean: %.2f, stddev: %.2f\n", means.at(2, 0), stddev.at(2, 0));
waitKey(0);
return 0;
}