OpenCV--010图像像素值统计

OpenCV提供的图像像素值统计函数:

  • 查找最大值,最小值以及它们所在的位置:

    函数要求输入图像必须是CV_8UC1类型的,否则会报错

    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: 可选项。
    
    //创建单通道图像,并初始化每个像素点都为0;
    Mat src1;
    src1.create(Size(200, 200), CV_8UC1);
    src1.setTo(0);
    //创建3通道图像,并初始化每个像素点的BGR为(55,99,66)
    Mat src2(200, 200, CV_8UC3, Scalar(55, 99, 66));
    imshow("src1", src1);
    imshow("src2", src2);
    
    //更该单通道图像像素坐标为(22,33)的图像像素值为44
    src1.at<uchar>(22, 33) = 255;
    
    //更改3通道像素点的像素值。
    src2.at<Vec3b>(22, 32)[0] = 33;
    src2.at<Vec3b>(22, 32)[1] = 255;
    src2.at<Vec3b>(22, 32)[2] = 33;
    
    src2.at<Vec3b>(32, 32)[0] = 54;
    src2.at<Vec3b>(32, 32)[1] = 25;
    src2.at<Vec3b>(32, 32)[2] = 34;
    
    src2.at<Vec3b>(42, 32)[0] = 255;
    src2.at<Vec3b>(42, 32)[1] = 255;
    src2.at<Vec3b>(42, 32)[2] = 255;
    imshow("src11", src1);
    imshow("src22", src2);
    
    //定义最大值,最小值变量,用于接收函数查询的结果
    double minV=0, maxV=0;
    //定义坐标,接收查询的最小值,最大值的坐标值
    Point minLoc, maxLoc;
    
    //查询单通道最大值和最小值,以及坐标
    minMaxLoc(src1, &minV, &maxV, &minLoc, &maxLoc);
    cout << "minV=" << minV << "   maxV=" << maxV << endl;
    cout << "minLoc:(" << minLoc.x << "," << minLoc.y << ")" << endl;
    cout << "maxLoc:(" << maxLoc.x << "," << maxLoc.y << ")" << endl;
    

    OpenCV--010图像像素值统计_第1张图片

    注意
    多通道在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的



  • 计算图像所有通道像素的均值与方差

  1. 标准差是反映一组数据离散程度最常用的一种量化形式,是表示精确度的重要指标

  2. 标准方差公式:

    在这里插入图片描述

    n代表参与运算的个数。
    r代表数据平均值。

       	void meanStdDev(InputArray src,
       	                OutputArray mean, OutputArray stddev,
       	                InputArray mask=noArray());
       	src: 输入原图。
       	mean:返回图像像素均值。
       	stddev:返回图像像素均差值。
       	mask:可选项。	
    
     	//**接上面代码**
     	Mat mean, stddev;
     	meanStdDev(src2, mean,stddev);
     	//3个通道会返回每个通道的均值和标准方差
     	cout << "均值: " << mean.at<double>(0, 0) << "," << mean.at<double>(1, 0) << "," << mean.at<double>(2, 0) << ")" << endl;
     	cout << "标准方差:" << stddev.at<double>(0, 0) << "," << stddev.at<double>(1, 0) << "," << stddev.at<double>(2, 0) << ")" << endl;
     	
     	/* 输出:
     				均值: 55.0044,99.0059,66.0031)
     				标准方差:1.00603,1.16347,0.972543) 
     	*/		
    

你可能感兴趣的:(#,OpenCV图像处理,OpenCV,像素值的统计)