1、cv2.calcHist 函数 统计直方图信息
hist = cv2.calcHist(image, channels, mask, histSize, range, accumulate)
返回值:
- hist:返回的统计直方图,是一个一维数组,数组内的元素是各个灰度级的像素个数
参数:
- images:原始图像,该图像需要使用“[]”括起来。
- channels:指定通道编号。通道编号需要用 “[]” 括起来,
- 如果输入图像是单通道灰度 图像,该参数的值就是[0]
- 对于彩色图像,它的值可以是[0]、[11、[2],分别对应通道 B、G、R
- mask:掩模图像。
- 当统计整幅图像的直方图时,将这个值设为 None
- 当统计图像某一部分的直方图时,需要用到掩模图像
- histSize:BINS 的值,该值需要用 “[]” 括起来。例如,BINS 的值是 256,需要使用“[256]’作为此参数值。
- ranges: 即像素值范围。例如,8位灰度图像的像素值范围是 [0,255]。
- accumulate:累计(累积、叠加)标识,默认值为 False。
- 如果被设置为True,则直方图在开始计算时不会被清零,计算的是多个直方图的累积结果,用于对一组图像计算直方图。该参数允许从多个对象中计算单个直方图,或者实时更新直方图。
举例:
import cv2
original_image = cv2.imread("Lena.bmp", 0)
hist = cv2.calcHist([original_image], [0], None, [256], [0, 255])
print(type(hist))
print(hist.shape)
print(hist)
# <class 'numpy.ndarray'>
# (256, 1)
# [[0.000e+00]
# [0.000e+00]
# [0.000e+00]
# [0.000e+00]
# [0.000e+00]
# ..........
# [0.000e+00]
# [0.000e+00]
# [0.000e+00]
# [0.000e+00]
# [0.000e+00]]
2、结合 matplotlib.pyplot.plot 绘制直方图
import cv2
import matplotlib.pyplot as plt
o = cv2.imread("Lena.bmp", -1)
hist_b = cv2.calcHist([o], [0], None, [256], [0, 255])
hist_g = cv2.calcHist([o], [1], None, [256], [0, 255])
hist_r = cv2.calcHist([o], [2], None, [256], [0, 255])
plt.plot(hist_b, color='b')
plt.plot(hist_g, color='g')
plt.plot(hist_r, color='r')
plt.show()