欢迎光临散文网 会员登陆 & 注册

【第21节】2D直方图

2022-11-29 15:48 作者:海鸥之道  | 我要投稿

目标

        本节我们会学习如何绘制2D直方图,我们会在下一节中使用它。

1、介绍

        在前面的部分我们介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在2D直方图中我们就要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色( Hue )和饱和度( Saturation )。 根据这两个特征绘制2D直方图。

2、OpenCV中2D直方图

        使用函数CV2.calcHist(来计算直方图既简单又方便。如果要绘制颜色直方图的话,我们首先需要将图像的颜色空间从BGR转换到HSV。(记住,计算一维直方图,要从BGR转换到HSV )。计算2D直方图,函数的参数要做如下修改:

  • channels=[0, 1] 因为我们需要同时处理H和S两个通道。

  • bins=[180,256]H通道为180, S通道为256。

  • range=[0, 180,0, 256]H的取值范围在0到180,S的取值范围在0到256。

代码如下:

这就搞定了,简单吧。

3、Numpy中2D直方图

        Numpy同样提供了绘制2D直方图的函数:np.histogram2d()。前面绘制1D直方图时我们使用的是 np.histogram()。

        第一个参数是H通道,第二个参数是S通道,第三个参数是bins的数

目,第四个参数是数值范围。现在我们要看看如何绘制颜色直方图。

4、绘制直方图

        方法1:使用CV2.imshow()我们得 到结果是一个180x256的两维数组。所以我们可以使用函数CV2.imshow()来显示它。但是这是一个灰度图,除非我们知道不同颜色H通道的值,否则我们根本就不知道那到底代表什么颜色。

        方法2 :使用Matplotlib()我们还可以使用函数 matplotlib. pyplot.imshow()来绘制2D直方图,再搭配上不同的颜色图( color_ map )。这样我们会对每个点所代表的数值大小有一个更直观的认识。但是跟前面的问题一样,你还是不知道那个数代表的颜色到底是什么。虽然如此,我还是更喜欢这个方法,它既简单又好用。

注意:在使用这个函数时,要记住设置插值参数为 nearest。

代码如下:

显示如下,X 轴显示 S 值,Y 轴显示 H 值:

1)在直方图中可以看到,在H=20,S=50附近有比较高的值,这部分与白云相对应;

2)在H=100,S=130附近有比较高的值,这部分与蓝天对应

3)在H=100,S=130附近有比较高的值,这部分与枯黄大地相对应








【第21节】2D直方图的评论 (共 条)

分享到微博请遵守国家法律