opencv 绘制直方图

本文介绍了如何使用OpenCV计算和绘制图像的直方图,包括灰度图像和彩色图像,并展示了如何应用掩膜进行直方图绘制。同时,讨论了直方图均衡化的方法以及如何通过比较直方图来评估图像的相似性。
摘要由CSDN通过智能技术生成

一、话说直方图

说到直方图,同学们一定会想到统计学里的直方图(没有想起来的抓紧去翻下中学数学课本)。所谓直方图啊,就是把一大坨东西分成好几部分(横坐标),然后看看每一部分有多少(纵坐标)。比如说康娜酱的班里要做个人爱好的统计,喜欢跳绳的有5人,喜欢唱歌的有8人,喜欢读书的有6人,超喜欢康娜酱的有1人(才川同学了解一下)。那么图像中的直方图又是个啥子呢?喜欢摄影的同学一定见过。图像中常见的直方图是亮度直方图(在CV中还有一种H-S直方图,即在HSV空间中计算,若没有特殊说明,将会默认介绍亮度直方图),横坐标表示像素值的分布(通常0~255),纵坐标为像素个数,那么图像直方图的含义就是数数看每个像素值对应的像素个数,进一步讲,横坐标的左侧为暗的区域,右侧为亮的区域,所以图像的亮度分布情况就可以反应在亮度直方图中。

二、绘制直方图

在OpenCV中,我们使用函数calcHist来计算直方图(仅仅是计算),如果使用python,则可借助matplotlib绘制出直方图(python的话当然也可以用OpenCV中的绘图函数,但有matplotlib这么好的工具为什么不用呢)。

API:

hist=cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
  • hist:直方图的数据,是一个二维数组
  • image:数组集合,这里就是图像集合,可以是一幅或多幅图像,需要有相同的深度(CV_8U或CV_32F)和尺寸
  • channels:要统计哪个通道的像素,彩色图像的话就有3个通道
  • mask:掩膜,当我们想要对图像中某一区域做直方图时就要在图像上加一层掩膜
  • histSize:步长,要把横轴分成多少份,有些教程中叫做bin的长度
  • ranges:统计量的取值范围,注意不是纵轴的取值范围,比如统计量是像素,那么通常就是像素值的取值范围

注意

  • 参数images、channels、histSize和ranges参数都要写成列表的形式,因为这个函数允许处理多幅图像或多个通道
  • 当要处理多幅图像或多个通道时,histSize和ran
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值