📜  图像的直方图(1)

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

图像的直方图

在数字图像处理中,直方图是一种将像素灰度级频数可视化的方法。直方图通常被用来分析图像的亮度和对比度。直方图反映了给定图像中每个灰度级的像素数量。

像素灰度级的概念

在数字图像中,每个像素都可以表示为一个灰度级。一个灰度级通常用一个字节(即八个二进制位)表示。因此,通常一个图像可以表示256个灰度级,从0到255。0代表黑色,255代表白色。

绘制图像的直方图

在Python中,可以使用OpenCV库中的cv2.calcHist()函数来计算并绘制图像的直方图。该函数的参数包括输入的图像,颜色通道(对于灰度图像而言为[0]),掩膜(用于只计算掩膜内的像素直方图,如果没有则为None),直方图的大小,直方图的范围(通常为[0,256]),等等。下面是一个简单的示例代码:

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

img = cv2.imread('lena.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])

plt.hist(img.ravel(),256,[0,256]); plt.show()
plt.plot(hist); plt.show()

该代码将读取名为lena.jpg的图像并绘制其直方图。首先使用cv2.imread()函数读取灰度图像,然后使用cv2.calcHist()函数计算直方图。最后使用matplotlib库中的hist()函数绘制直方图。

直方图均衡化

直方图均衡化是一种用于增强图像对比度的技术。它通过重新分配像素灰度级来拉伸图像的灰度级范围,并在一定程度上改善图像的视觉效果。直方图均衡化可以使用OpenCV库中的cv2.equalizeHist()函数轻松实现。下面是一个简单的示例代码:

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

img = cv2.imread('lena.jpg',0)
equ = cv2.equalizeHist(img)

plt.hist(equ.ravel(),256,[0,256]); plt.show()
cv2.imshow('equalized',equ)
cv2.waitKey(0)
cv2.destroyAllWindows()

该代码将读取名为lena.jpg的图像,并对其进行直方图均衡化。首先使用cv2.imread()函数读取灰度图像,然后使用cv2.equalizeHist()函数对其进行直方图均衡化。最后使用matplotlib库中的hist()函数绘制均衡化后的直方图,并使用OpenCV库中的imshow()函数显示图像。