python opencv入门 2D直方图(23)

内容来自OpenCV-Python Tutorials 自己翻译整理

目标:
绘制2D直方图

介绍
一维直方图是因为只考虑一个灰度值的特征。在2D直方图中要考虑两个图像特征。在彩色图像直方图中,要考虑色调和饱和度。根据这两个特征绘制2D直方图。

2D直方图:
使用函数 cv2.calcHist()来计算,绘制彩色直方图前需要将图像从BGR空间转换到HSV空间。(一维直方图要从BGR转换到灰度)
参数如下:

  1. channels=[0,1] 因为要处理H和S两个通道
  2. bins=[180,256]H通道为180,S通道为256
  3. range=[0,180,0,256]H取值范围在和S的取值范围

代码:

import cv2
import numpy as np

img = cv2.imread('2.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

numpy中2D直方图:
一维直方图是np.histogram(),那么二维是np.histogram2d()
(原文档代码有误,没有h和s参数)

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('3.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
print(hsv.shape)#(300, 300, 3)

hue=hsv[:,:,0]
sat=hsv[:,:,1]
hist, xbins, ybins = np.histogram2d(hue.ravel(),sat.ravel(),[180,256],[[0,180],[0,256]])

第一个参数是 H 通道,第二个参数是 S 通道,第三个参数是 bins 的数目,第四个参数是数值范围。

绘制

方法1:使用cv2.imshow,但是得到的是一个灰度图。

方法2:使用Matplotlib() ,使用 matplotlib.pyplot.imshow()函数绘制2D直方图。

插值参数为nearest

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('14.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )
plt.imshow(hist,interpolation = 'nearest')
plt.show()

(效果貌似不是很明显-_-)

X轴是S值,Y轴是H

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值