直方图均衡化是一种常用的图像增强技术,它可以提高图像的对比度。在Python中,可以使用OpenCV库来实现直方图均衡化。以下是一个简单的示例代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读入图像
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
# 将图像转换为浮点型并归一化到[0, 1]区间内
img_float = img.astype(np.float32) / 255.0
# 计算图像的直方图
hist, bins = np.histogram(img_float, 256, [0, 1])
# 计算累积直方图,得到直方图均衡化后的灰度映射表
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max()/ cdf.max()
# 创建映射表并应用映射表到原始图像上得到均衡化后的图像
equalized_img = np.interp(img_float, bins[:-1], cdf_normalized).astype(np.uint8)
# 显示原始图像和均衡化后的图像
plt.figure()
plt.subplot(1, 2, 1), plt.imshow(img), plt.title('Original Image')
plt.subplot(1, 2, 2), plt.imshow(equalized_img), plt.title('Equalized Image')
plt.show()
```
在这个示例代码中,首先读入一张图像并将其转换为浮点型并归一化到[0, 1]区间内。然后计算图像的直方图并计算累积直方图,得到直方图均衡化后的灰度映射表。接着使用NumPy的`np.interp`函数创建映射表并应用映射表到原始图像上得到均衡化后的图像。最后使用Matplotlib库显示原始图像和均衡化后的图像。你可以将这段代码保存到一个Python文件中,并将图像路径替换为你自己的图像路径来运行它。