OpenCV Python - 直方图
直方图显示图像中的强度分布。 它在 X 轴上绘制像素值(0 到 255),在 Y 轴上绘制像素数。
利用直方图,可以了解指定图像的对比度、亮度和强度分布。 直方图中的 bin 表示 X 轴上值的增量部分。
在我们的例子中,它是像素值,默认的 bin 大小是 1。
在 OpenCV 库中,cv2.calcHist() 函数根据输入图像计算直方图。 该函数的命令如下 −
cv.calcHist(images, channels, mask, histSize, ranges)
参数
cv2.calcHist()函数的参数如下 −
images − 它是 uint8 或 float32 类型的源图像,在方括号中,即"[img]"。
channels − 它是我们计算直方图的通道的索引。 对于灰度图像,它的值为[0]。 对于 BGR 图像,可以通过 [0]、[1] 或 [2] 来计算每个通道的直方图。
mask − 对于完整图像,mask(遮罩)图像被指定为"None"。 对于图像的特定区域,您必须为其创建mask(遮罩)图像并将其作为遮罩。
histSize − 这代表我们的 BIN 计数。
ranges − 通常,它是 [0,256]。
使用 Matplotlib 绘制直方图
可以借助 Matplotlib 的 pyplot.plot() 函数或调用 OpenCV 库中的 Polylines() 函数来获得直方图。
示例
以下程序计算图像 (lena.jpg) 中每个通道的直方图并绘制每个通道的强度分布 −
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('lena.jpg') color = ('b','g','r') for i,col in enumerate(color): hist = cv.calcHist([img],[i],None,[256],[0,256]) plt.plot(hist, color = col) plt.xlim([0,256]) plt.show()