首页 > 程序开发 > Web开发 > Python > 正文
python opencv入门 2D直方图(23)
2017-08-10 09:47:08       个评论    来源:  
收藏    我要投稿

目标:

绘制2D直方图

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

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

channels=[0,1] 因为要处理H和S两个通道 bins=[180,256]H通道为180,S通道为256 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

点击复制链接 与好友分享!回本站首页
上一篇:设计模式-适配器模式-adapter-python
下一篇:python入门(一)
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站