OpenCV绘制直方图cv2.calcHist()
直方图:X轴是像素值,Y轴是图像中该像素值的数量。通过查看图像的直方图,可以直观地了解图像的对比度、亮度、强度分布等。
BINS:一般直方图显示的像素值是0—255,一共256个。也可以将直方图分成16个子部分,0—15之间的像素数量、16—31之间的像素数量…240—255之间的像素数量,只需要16个值就可以表示直方图,每个子部分都称为’BIN’。
OpenCV中计算直方图的函数:
cv2.calcHist(images, channels, mask, histSize, ranges[,hist[,accumulate]])
images:是uint8或者float32类型的源图像,应该放在方括号中,即[img]。
channels:也是以方括号给出,是计算直方图的通道的索引。输入灰度图像,其值是[0]。对于彩色图像,可以传递[0]、[1]、[2]分别计算BGR通道的直方图。
mask:图像掩码,为了找到完整图像的直方图,将其指定为’无’。如果查找图像特定区域的直方图,需要创建一个掩码图像。
histSize:表示BIN计数,需要放在方括号中,对于全尺寸是[256]
ranges:需要测量的强度值的范围,通常是[0,256],即所有强度值。
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('C:\\Users\\Administrator\\Desktop\\xusong.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转化为灰度图
#hist是256*1的数组,每个值对应图像中具有该像素值的像素数量
hist = cv2.calcHist([img_gray],[0],None,[256],[0,256])
#绘制直方图,使用matplotlib
'''
绘制灰度图img_gray的直方图
plt.hist(img_gray.ravel(),256,[0,256])
plt.show()
'''
#绘制彩色图像的BGR的直方图,将BGR绘制在同一个图中
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()