直方图是一种针对图片像素值的统计工具,通过直方图,你可以对图片像素值的分布有一个直观的了解。
生成直方图
opencv中生成直方图使用cv2.calcHist()
函数,函数原型是:
hist = cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
参数解读:
- Images:输入图片集合,如果是单张图片,写为
[img]
。 - channels:图片的颜色通道。输入图片是灰度图,则该参数设置为
[0]
;输入图片是彩色图,该参数可设置为[0]/[1]/[2]
,分别表示B/G/R通道。 - mask:如果想要对整张图片生成直方图,该参数设置为
None
;如果想要对图片的某一区域生成直方图,则需要传入一数组作为遮罩,后续会解释。 - histSize:直方图切片尺寸,默认值为
[256]
,表示直方图采样范围是[0,255]。如果设置为16,直方图采样范围是[0,15]∪[16,31]∪……[240,255]。 - ranges:像素值范围,一般设置为
[0,256]
。 - hist:输出直方图。
- accumulate:如果该参数设置为
TRUE
,直方图在分配的时候不会被清零,可用于动态生成直方图或使用多张图片生成一张直方图。
函数文档:cv2.calcHist()
Numpy中也提供了生成直方图的函数,示例:
hist,bins = np.histogram(img.ravel(),256,[0,256])
绘制直方图
绘制直方图一般使用matplotlib函数