你能用Python写一个直方图匹配的代码吗
时间: 2023-04-03 15:03:23 浏览: 207
可以,以下是一个简单的 Python 直方图匹配代码:
```python
import cv2
import numpy as np
# 读取原始图像和目标图像
src = cv2.imread('source.jpg', cv2.IMREAD_GRAYSCALE)
dst = cv2.imread('target.jpg', cv2.IMREAD_GRAYSCALE)
# 计算原始图像和目标图像的直方图
src_hist = cv2.calcHist([src], [0], None, [256], [0, 256])
dst_hist = cv2.calcHist([dst], [0], None, [256], [0, 256])
# 将直方图归一化到 0-255 范围内
src_hist = cv2.normalize(src_hist, src_hist, 0, 255, cv2.NORM_MINMAX)
dst_hist = cv2.normalize(dst_hist, dst_hist, 0, 255, cv2.NORM_MINMAX)
# 计算原始图像和目标图像的累积直方图
src_cdf = np.cumsum(src_hist)
dst_cdf = np.cumsum(dst_hist)
# 计算原始图像和目标图像的直方图均衡化映射表
src_map = np.interp(src_cdf, dst_cdf, np.arange(256))
src_map = np.uint8(src_map)
# 对原始图像进行直方图匹配
matched = cv2.LUT(src, src_map)
# 显示结果
cv2.imshow('Source', src)
cv2.imshow('Target', dst)
cv2.imshow('Matched', matched)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码可以实现将原始图像匹配到目标图像的直方图分布,从而实现颜色风格的转换。
阅读全文