OpenCV Python 怎样计算并绘制图像区域的直方图?

OpenCV Python 怎样计算并绘制图像区域的直方图?

在OpenCV中,我们使用cv2.calcHist()函数计算图像直方图。我们也可以使用该函数来计算图像区域的直方图。首先,我们需要定义一个掩码来计算图像区域的直方图。掩码中的白色用于原始输入图像中要检查的区域,掩码图像中的黑色则用于要忽略的区域。现在,我们将该掩码作为函数的参数来计算直方图。

步骤

要计算并绘制图像区域的直方图,可以按照以下步骤进行 ŌłÆ

  • 导入所需的库:OpenCV、NumPy和matplotlib。请确保已经安装了它们。

  • 使用cv2.imread()方法读取输入图像。指定图像的完整路径。

  • 为图像定义掩码。掩码图像中的黑色是要忽略的区域,白色是原始输入图像中要检查的区域。

  • 使用cv2.split()函数拆分输入图像的不同通道(蓝色、绿色和红色)。

  • 使用上述定义的掩码计算输入图像的不同通道的直方图。绘制输入图像的不同颜色的直方图。

hist = cv2.calcHist([channel], [0], mask, [256], [0, 256])
Python
  • 要可视化输入图像的掩码区域,请对输入图像和掩码图像进行cv2.bitwise_and()操作。它将创建输入图像的掩码区域。

让我们看一些例子,以便更好地理解问题。

输入

下面的图像将作为我们的输入文件。

OpenCV Python 怎样计算并绘制图像区域的直方图?

示例

在此示例中,我们计算输入图像的矩形区域的直方图并绘制直方图。

# 导入所需的库
import cv2
from matplotlib import pyplot as plt
import numpy as np

# 读取输入图像
img = cv2.imread('architecture2.jpg')

# 定义计算并绘制直方图的函数
def plot_histogram(img, title, mask=None):
   # 把图像分成蓝、绿、红三个通道
   channels = cv2.split(img)
   colors = ("b", "g", "r")
   plt.title(title)
   plt.xlabel("Bins")
   plt.ylabel("# of Pixels")
   # 循环遍历图像通道
   for (channel, color) in zip(channels, colors):
      # 计算当前通道的直方图并绘制
      hist = cv2.calcHist([channel], [0], mask, [256], [0, 256])
      plt.plot(hist, color=color)
      plt.xlim([0, 256])

# 为图像定义遮罩;黑色代表要忽略的区域

# 白色代表要检查的区域
mask = np.zeros(img.shape[:2], dtype="uint8")
cv2.rectangle(mask, (160, 130), (410, 290), 255, -1)

# 显示遮罩区域
masked = cv2.bitwise_and(img, img, mask=mask)

# 计算遮罩图像的直方图
plot_histogram(img, "遮罩图像的直方图", mask=mask)

# 显示图形
plt.show()cv2.imshow("遮罩", mask)
cv2.imshow("遮罩图像", masked)
Python

输出

当您运行上面的Python程序时,它会产生以下输出窗口。

OpenCV Python 怎样计算并绘制图像区域的直方图?

上面的输出图像显示了输入图像中矩形区域的直方图。

OpenCV Python 怎样计算并绘制图像区域的直方图?

OpenCV Python 怎样计算并绘制图像区域的直方图?

上面的两个输出图像是输入图像的遮罩和矩形区域。仅为这个遮罩区域计算直方图。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV

登录

注册