如何在OpenCV Python中计算和绘制图像的二维直方图?
我们可以应用 cv2.calcHist() 函数来计算图像的二维直方图。彩色图像有三个通道- 红、绿和蓝。我们可以同时为两个颜色通道计算二维直方图。因此,我们有三种颜色通道的两两组合- 红色和绿色(或绿色和红色)、绿色和蓝色(或蓝色和绿色)以及蓝色和红色(或红色和蓝色)。
步骤
要计算和绘制输入图像的二维直方图,可以按照以下步骤进行:
- 导入所需的库 OpenCV 和 matplotlib 。确保您已经安装了它们。
-
使用 cv2.imread() 方法读取输入图像。指定图像的完整路径。
-
使用 cv2.split() 函数将输入图像拆分为相应的通道 蓝色、绿色和红色。
blue, green, red = cv2.split(img)
- 为两个颜色通道同时计算二维彩色直方图。为三个颜色通道的所有三种组合计算二维直方图。例如,要为绿色和蓝色通道计算2D直方图,应用以下代码片段。
hist = cv2.calcHist([green, blue], [0, 1], None, [32, 32],[0, 256, 0, 256])
- 绘制上述计算的二维直方图。
让我们通过一些示例来更清晰地了解这个问题。
我们在下面的示例中使用以下图像作为 输入文件 。
示例
在此 Python 程序中,我们针对输入图像的三个颜色组合(蓝色和绿色、绿色和红色以及红色和蓝色)计算并绘制二维直方图。
# 导入所需库 import cv2 from matplotlib import pyplot as plt # 读取输入图像 img = cv2.imread('blue-pool.jpg') # 将图像分割成各自的蓝色、绿色和红色通道 blue, green, red = cv2.split(img) # 绿色和蓝色通道的2D颜色直方图 plt.subplot(131) hist1 = cv2.calcHist([green, blue], [0, 1], None, [32, 32],[0, 256, 0, 256]) p = plt.imshow(hist1, interpolation="nearest") plt.title("G和B的2D直方图", fontsize=8) plt.colorbar(p) # 红色和绿色通道的2D颜色直方图 plt.subplot(132) hist2 = cv2.calcHist([red, green], [0, 1], None, [32, 32],[0, 256, 0, 256]) p = plt.imshow(hist2, interpolation="nearest") plt.title("R和G的2D直方图", fontsize=8) plt.colorbar(p) # 蓝色和红色通道的2D颜色直方图 plt.subplot(133) hist3 = cv2.calcHist([blue, red], [0, 1], None, [32, 32],[0, 256, 0, 256]) p = plt.imshow(hist3, interpolation="nearest") plt.title("B和R的2D直方图", fontsize=8) plt.colorbar(p) plt.show()
运行上述程序后,将输出以下窗口,显示输入图像的2D直方图。
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com