社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
今天学习了一下如何在python-opencv下对直方图进行操作:
1 直方图的计算、绘制直方图
1.1 直方图的计算
主要用到的几个函数有cv2.calcHist(),np.histogram()
直方图的原理很简单,它的X轴是灰度值(0到255),y轴是图片中具有同一个灰度值的数目。直方图就是对图像的灰度分布进行一个统计。
所有的例子以这种图片为例:
统计图像的直方图的两种方法:
1.cv2.calcHist函数
img=cv2.imread('home'.jpg',0)
hist=cv2.calcHist([img],[0],None,[256],[0,256])
2.np.histogram函数
hist,bin=np.histogram(img.ravel(),256,[0,256])
1.2 直方图的绘制
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('qx16.jpg')
plt.hist(img.ravel(),256,[0,256])
plt.show()
这是直接用matplot里面的hist函数绘制并统计出直方图
color=('b','g','r')
for i,col in enumerate(color):
histr=cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color=col)
plt.xlim([0,256])
plt.show()
这是同时绘制多通道的(BGR)的直方图
2.绘制颜色空间的2D直方图
在彩色空间中我们需要考虑图像的颜色(Hue)和饱和度(Saturation),所以需要绘制2D直方图
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()
先将图片转换成HSV空间,下列参数需要注意:channels:[0,1]这里要同时处理H,S两个通道
bins=[180,256]H通道为180,S通道为256
range范围选择也变化了
最后结果:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!