如何在OpenCV Python中计算和绘制图像的二维直方图?

如何在OpenCV Python中计算和绘制图像的二维直方图?

我们可以应用 cv2.calcHist() 函数来计算图像的二维直方图。彩色图像有三个通道- 红、绿和蓝。我们可以同时为两个颜色通道计算二维直方图。因此,我们有三种颜色通道的两两组合- 红色和绿色(或绿色和红色)、绿色和蓝色(或蓝色和绿色)以及蓝色和红色(或红色和蓝色)。

步骤

要计算和绘制输入图像的二维直方图,可以按照以下步骤进行:

  • 导入所需的库 OpenCVmatplotlib 。确保您已经安装了它们。

  • 使用 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])
  • 绘制上述计算的二维直方图。

让我们通过一些示例来更清晰地了解这个问题。

我们在下面的示例中使用以下图像作为 输入文件

如何在OpenCV Python中计算和绘制图像的二维直方图?

示例

在此 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直方图。

如何在OpenCV Python中计算和绘制图像的二维直方图?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV