您当前的位置: 首页 >  opencv

wendy_ya

暂无认证

  • 1浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV之直方图绘制(calcHist函数详解)

wendy_ya 发布时间:2021-02-02 17:23:09 ,浏览量:1

目录
    • 1.直方图的定义
    • 2.calcHist()函数说明
    • 3.绘制直方图
      • 3.1 读取原图像并检查图像是否读取成功
      • 3.2 定义直方图参数并计算直方图
      • 3.3 绘制直方图
    • 4.关于BGR直方图的绘制
      • 4.1 读取原图像并检查图像是否读取成功
      • 4.2 分通道显示
      • 4.3 分B,G,R计算直方图
      • 4.4 绘制直方图

1.直方图的定义

要理解直方图,绕不开“亮度”这个概念。人们把亮度分为0到255共256个数值,数值越大,代表的亮度越高。其中0代表纯黑色的最暗区域,255表示最亮的纯白色,而中间的数字就是不同亮度的灰色。人们还进一步把这些亮度分为了5个区域,分别是黑色,阴影,中间调,高光和白色。 在这里插入图片描述 在图像处理上,直方图是图像信息统计的有力工具。其实也就是统计一幅图某个亮度像素数量。

2.calcHist()函数说明
void calcHist( const Mat* images, int nimages,
                          const int* channels, InputArray mask,
                          OutputArray hist, int dims, const int* histSize,
                          const float** ranges, bool uniform=true, bool accumulate=false );

参数解释: • images:输入的图像的指针; • nimages:输入图像个数; • channels:需要统计直方图的第几通道; • mask:掩模,mask必须是一个8位(CV_8U)的数组并且和images的数组大小相同; • hist:直方图计算的输出值; • dims:输出直方图的维度(由channels指定); • histSize:直方图中每个dims维度需要分成多少个区间(如果把直方图看作一个一个竖条的话,就是竖条的个数); • ranges:统计像素值的区间; • uniform=true:是否对得到的直方图数组进行归一化处理; • accumulate=false:在多个图像时,是否累积计算像素值的个数;

【注】:在计算图像直方图的时候一般配合minMaxLoc()和normalize()函数一起使用。

3.绘制直方图

只看函数说明肯定看不明白,下面来对函数进行代码演示。绘制直方图主要有三步:

3.1 读取原图像并检查图像是否读取成功

相关代码如下:

Mat src, gray;
src = imread("D:/Desktop/16.png");
if (!src.data)
{
	cout             
关注
打赏
1659256378
查看更多评论
0.0438s