📅  最后修改于: 2023-12-03 15:21:32.331000             🧑  作者: Mango
在图像处理中,直方图是一种强大而有用的工具。 他们用来在一定范围内对像素值的分布进行可视化,并且可以用于图像处理的许多应用程序。在本文中,我们将介绍如何使用OpenCV,scikit-image和Python创建和显示直方图。
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是另一款视觉库,也可以用于创建和显示直方图。其中 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的图像,计算直方图,并最终绘制出来。
如果您不想使用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创建和显示直方图。有了这些工具和技术,您可以在处理图像时轻松使用直方图,以便更好地理解和控制图像的特性。