python写直方图均衡化
时间: 2023-05-15 21:04:59 浏览: 123
可以使用OpenCV库中的equalizeHist函数实现直方图均衡化,代码如下:
import cv2
img = cv2.imread('image.jpg', 0) # 读取灰度图像
equ = cv2.equalizeHist(img) # 直方图均衡化
cv2.imshow('equalized', equ) # 显示均衡化后的图像
cv2.waitKey(0)
cv2.destroyAllWindows()
相关问题
python写直方图均衡化,不用opencv,和函数
可以使用Python的PIL库来实现直方图均衡化,以下是示例代码:
```python
from PIL import Image
def histeq(image_path):
# 打开图像
image = Image.open(image_path).convert('L')
# 获取直方图
hist = image.histogram()
# 计算累积直方图
cdf = [sum(hist[:i+1]) for i in range(len(hist))]
# 计算映射表
lut = [int((cdf[i]-cdf[0])/(image.size[0]*image.size[1]-cdf[0])*255) for i in range(len(cdf))]
# 应用映射表
result = Image.new('L', image.size)
result.putdata([lut[p] for p in image.getdata()])
return result
```
调用该函数并传入图像路径即可实现直方图均衡化。
注意:该代码仅适用于灰度图像。如果要处理彩色图像,需要将图像转换为YUV或HSV色彩空间,对亮度通道进行直方图均衡化。
python写直方图均衡化,不用opencv和函数,使用matplotlib
可以使用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显示原图和均衡化后的图像。