opencv Python实现直方图均衡化图像
时间: 2025-05-17 17:37:32 浏览: 21
### 使用 Python 和 OpenCV 实现图像的直方图均衡化
为了实现图像的直方图均衡化,可以利用 `cv2.equalizeHist` 函数来增强灰度图像对比度。对于彩色图像,则需转换到 YUV 或 LAB 颜色空间再单独对亮度通道应用该操作。
#### 对于灰度图像:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 加载灰度图像
img = cv2.imread('image_path', 0)
# 应用直方图均衡化
equ = cv2.equalizeHist(img)
# 显示原始图像和均衡化后的图像
plt.subplot(1, 2, 1), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(equ, cmap='gray')
plt.title('Equalized Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
此段代码展示了如何读取一张图片并对其进行直方图均衡化处理[^1]。
#### 对于彩色图像:
由于直接在 RGB 上做均衡化可能会改变颜色属性,因此推荐先转成其他色彩模式如 YUV 或者 LAB,在这些模型里只针对 Luminance(亮度)分量执行上述过程即可获得更好的视觉效果。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 加载彩色图像
img = cv2.imread('color_image_path')
# 转换成LAB颜色空间
lab= cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
l,a,b=cv2.split(lab)
# 只对L层进行直方图均衡化
l_eq = cv2.equalizeHist(l)
# 合并LAB三个通道
lab Eq=cv2.merge((l_eq,a,b))
# 将LAB转换回BGR
res = cv2.cvtColor(labEq,cv2.COLOR_LAB2BGR)
# 展示原图与结果图
plt.figure(figsize=(8,4))
plt.subplot(1,2,1); plt.axis('off'); plt.title('Original');
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB));
plt.subplot(1,2,2); plt.axis('off'); plt.title('Enhanced');
plt.imshow(cv2.cvtColor(res, cv2.COLOR_BGR2RGB));
plt.tight_layout(); plt.show();
```
这段脚本实现了将输入的颜色照片转化为更鲜艳版本的功能。
阅读全文
相关推荐
















