OpenCV Python - 直方图



直方图显示图像中像素强度的分布。它将像素值(0 到 255)绘制在 X 轴上,并将像素数量绘制在 Y 轴上。

通过使用直方图,可以了解指定图像的对比度、亮度和强度分布。直方图中的柱状图表示 X 轴上值的增量部分。

在本例中,它是像素值,默认的柱状图大小为 1。

在 OpenCV 库中,函数 `cv2.calcHist()` 用于计算输入图像的直方图。该函数的命令如下:

cv.calcHist(images, channels, mask, histSize, ranges)

参数

`cv2.calcHist()` 函数的参数如下:

  • `images` - 它是 uint8 或 float32 类型的源图像,用方括号括起来,即 "[img]"。

  • `channels` - 它是计算直方图的通道索引。对于灰度图像,其值为 [0]。对于 BGR 图像,您可以传递 [0]、[1] 或 [2] 来计算每个通道的直方图。

  • `mask` - 对于整幅图像,掩码图像设置为 "None"。对于图像的特定区域,您必须为此创建一个掩码图像并将其作为掩码。

  • `histSize` - 这代表我们的柱状图数量。

  • `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()

输出

Histogram
广告