直方图匹配 python
时间: 2023-11-10 15:04:29 浏览: 253
直方图匹配(Histogram Matching)是一种用于图像处理的技术,它可以将一张图像的直方图变换为另一张图像的直方图,从而使得两张图像的视觉效果更加相似。在 Python 中,可以使用 NumPy 和 OpenCV 库来实现直方图匹配。
以下是一个简单的示例代码:
```python
import cv2
import numpy as np
# 读取原始图像和目标图像
src_img = cv2.imread('src_img.jpg', cv2.IMREAD_GRAYSCALE)
target_img = cv2.imread('target_img.jpg', cv2.IMREAD_GRAYSCALE)
# 计算原始图像和目标图像的直方图
src_hist, _ = np.histogram(src_img.flatten(), 256, [0, 256])
target_hist, _ = np.histogram(target_img.flatten(), 256, [0, 256])
# 计算原始图像和目标图像的累积分布函数
src_cdf = src_hist.cumsum()
src_cdf_normalized = src_cdf * src_hist.max() / src_cdf.max()
target_cdf = target_hist.cumsum()
target_cdf_normalized = target_cdf * target_hist.max() / target_cdf.max()
# 构建原始图像和目标图像之间的映射关系
mapping = np.zeros(256, dtype=np.uint8)
for i in range(256):
j = 0
while j < 256 and target_cdf_normalized[j] < src_cdf_normalized[i]:
j += 1
mapping[i] = j
# 对原始图像进行直方图匹配
matched_img = mapping[src_img]
# 显示结果
cv2.imshow('src_img', src_img)
cv2.imshow('target_img', target_img)
cv2.imshow('matched_img', matched_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文