📜  与 OpenCV、scikit-image 和Python匹配的直方图(1)

📅  最后修改于: 2023-12-03 15:21:32.331000             🧑  作者: Mango

与 OpenCV、scikit-image 和Python匹配的直方图

在图像处理中,直方图是一种强大而有用的工具。 他们用来在一定范围内对像素值的分布进行可视化,并且可以用于图像处理的许多应用程序。在本文中,我们将介绍如何使用OpenCV,scikit-image和Python创建和显示直方图。

OpenCV

OpenCV是一款开源的计算机视觉库,其中包含了很多处理图像的函数。其中, cv2.calcHist() 函数可以用于计算图像的直方图。下面是一个示例代码。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 加载图像
img = cv2.imread('lenna.png', 0)

# 计算直方图
hist, bins = np.histogram(img.flatten(), 256, [0,256])

# 绘制直方图
plt.hist(img.flatten(), 256, [0,256], color='r')
plt.xlim([0,256])
plt.ylim([0,8000])
plt.show()

这将加载一张代表Lena的图像,并计算其直方图,最后绘制出来。其中 np.histogram() 函数将像素强度值分成256个bin,并对每个bin中的像素数量进行计数。 matplotlib 库可用于绘制直方图。

scikit-image

scikit-image是另一款视觉库,也可以用于创建和显示直方图。其中 skimage.exposure.histogram() 函数可以用于计算图像直方图,而 skimage.exposure.plot_hist() 函数可以用于绘制直方图。

import skimage.io
import skimage.exposure
from matplotlib import pyplot as plt

# 加载图像
img = skimage.io.imread('lenna.png', as_gray=True)

# 计算直方图
hist, bins = skimage.exposure.histogram(img, nbins=256)

# 绘制直方图
skimage.exposure.plot_hist(img, nbins=256)
plt.show()

这将加载一张Lena的图像,计算直方图,并最终绘制出来。

Python

如果您不想使用OpenCV或scikit-image,还可以使用Python自带的 numpy.histogram() 函数进行计算直方图。并使用 matplotlib 进行绘制。

import numpy as np
from matplotlib import pyplot as plt

# 加载图像
img = plt.imread('lenna.png')

# 计算直方图
hist, bins = np.histogram(img.flatten(), 256, [0,256])

# 绘制直方图
plt.hist(img.flatten(), 256, [0,256], color='r')
plt.xlim([0,256])
plt.ylim([0,8000])
plt.show()

这将加载一张Lena的图像,计算直方图,并最终绘制出来。

在本文中,我们介绍了如何使用OpenCV,scikit-image和Python创建和显示直方图。有了这些工具和技术,您可以在处理图像时轻松使用直方图,以便更好地理解和控制图像的特性。