雾看OpenCV(12-3)——2D直方图

前言

目标

  1. 如何绘制 2D 直方图。
  2. 对于彩色图像的直方图通常情况下我们需要考虑每个的颜色 (Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图。

正文

使用cv.calcHist绘制2D直方图

步骤

  1. 绘制图像的2D直方图,首先要将图像从BGR转为HSV.
  2. channels=[0,1] 因为我们需要同时处理 H 和 S 两个通道。
  3. bins=[180,256]H 通道为 180,S 通道为 256。
  4. range=[0,180,0,256]H 的取值范围在 0 到 180,S 的取值范围 在 0 到 256。

效果图
在这里插入图片描述
从上图中,我们同时处理了色调和饱和度两个通道的直方图,所以,从上面我们可以很清晰的看到各种颜色的直方图数据。hsv:色调(H),饱和度(S),明度(V)
code

def calcDrawHist(image):
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # hsv:色调(H),饱和度(S),明度(V)。
    hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
    plt.plot(hist)
    plt.show()

Numpy 中2D直方图

相比于2维直方图,一维直方图是那种只考虑了图像的一个特征:灰度值。但接下来,我们要考虑的是两个图像特征,对于彩色图像的2D直方图的话,我们一般是考虑H(色调Hue),S饱和度(Saturation).
首先,我们先了解我们要用的函数:np.histogram2d().
但不知道你还记不记得histogram这个东西。这个是一个x轴为0-255的像素值,y轴则是该像素值对应的大小。
效果图
在这里插入图片描述
code

def numpyDrawHist(image):
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # hsv:色调(H),饱和度(S),明度(V)。
    h,s,v = cv.split(hsv)
    hist,xbins,ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
    plt.plot(hist)
    plt.show()

关于上面用到的函数,这里稍微讲一下:
第一个参数是 H 通道,第二个参数是 S 通道,第三个参数是 bins 的数 目,第四个参数是数值范围。

参考

  1. OpenCV-Python-Tutorial-中文版20160814.pdf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值