python代码实现 图像的直方图均衡化
时间: 2023-07-23 17:01:36 浏览: 173
可以使用OpenCV库来实现图像的直方图均衡化。以下是一个示例代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread("image.jpg", 0)
# 进行直方图均衡化
equ = cv2.equalizeHist(img)
# 绘制直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 绘制均衡化后的图像直方图
hist_equ, bins_equ = np.histogram(equ.flatten(), 256, [0, 256])
cdf_equ = hist_equ.cumsum()
cdf_normalized_equ = cdf_equ * hist_equ.max() / cdf_equ.max()
# 显示原始图像、均衡化后的图像以及直方图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 2)
plt.imshow(equ, cmap='gray')
plt.title('Equalized Image')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 3)
plt.plot(cdf_normalized, color='b', label='Original')
plt.hist(img.flatten(), 256, [0, 256], color='r', alpha=0.5)
plt.legend(loc='upper left')
plt.title('Original Histogram')
plt.subplot(2, 2, 4)
plt.plot(cdf_normalized_equ, color='b', label='Equalized')
plt.hist(equ.flatten(), 256, [0, 256], color='r', alpha=0.5)
plt.legend(loc='upper left')
plt.title('Equalized Histogram')
plt.show()
```
这段代码首先使用`cv2.imread`函数读取图像,然后使用`cv2.equalizeHist`函数进行直方图均衡化。接着,通过`np.histogram`函数计算原始图像和均衡化后的图像的直方图,并使用`hist.cumsum`计算累积直方图。最后,使用`matplotlib.pyplot`库绘制原始图像、均衡化后的图像以及它们的直方图。
请注意,你需要将代码中的"image.jpg"替换为你自己的图像文件路径。
阅读全文