python写直方图均衡化,不用opencv和函数,使用matplotlib
时间: 2023-05-15 19:05:01 浏览: 179
可以使用numpy和matplotlib库来实现直方图均衡化,以下是示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 读取图像并转换为灰度图像
img = plt.imread('image.jpg')
gray = np.dot(img[...,:3], [0.299, 0.587, 0.114])
# 计算灰度直方图
hist, bins = np.histogram(gray.flatten(), 256, [0,256])
# 计算累积分布函数
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 计算均衡化后的像素值
equalized = np.interp(gray.flatten(), bins[:-1], cdf_normalized)
# 将像素值重新变为图像
equalized = equalized.reshape(gray.shape)
# 显示原图和均衡化后的图像
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs[0].imshow(gray, cmap='gray')
axs[0].set_title('Original')
axs[1].imshow(equalized, cmap='gray')
axs[1].set_title('Equalized')
plt.show()
```
这段代码使用numpy的histogram函数计算灰度直方图,然后计算累积分布函数,并使用numpy的interp函数计算均衡化后的像素值。最后将像素值重新变为图像,并使用matplotlib显示原图和均衡化后的图像。
阅读全文