通过直方图规定化将一张风景画的灰度图的直方图转换为水墨画风格的灰度分布python代码
时间: 2024-10-11 09:17:07 浏览: 87
为了将一张风景画的灰度图像转换成水墨画风格,我们通常会采用一些图像处理技巧,如直方图均衡化、对比度增强等,并结合阈值处理来模拟墨水的效果。这里是一个简化的Python代码示例,使用了PIL库来操作图片:
```python
from PIL import Image, ImageEnhance, ImageFilter
import numpy as np
def histogram_equalization_to_inkwash(image_path):
# 1. 加载图像并转换为灰度
img = Image.open(image_path).convert('L')
# 2. 直方图均衡化增强对比度
enhancer = ImageEnhance.Contrast(img)
eq_img = enhancer.enhance(1.5) # 调整对比度以增强效果
# 3. 应用模糊滤镜模拟水墨效果
ink_img = eq_img.filter(ImageFilter.BLUR)
# 4. 将图像转换回像素数组,并应用自适应阈值
pixels = np.array(ink_img)
_, thresh_img = cv2.threshold(pixels, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 使用Otsu算法确定阈值
# 5. 反转黑白二值图像,模拟墨迹
ink_wash_img = 255 - thresh_img
# 6. 将结果转换回Image对象并保存
ink_wash_img = Image.fromarray(ink_wash_img.astype(np.uint8))
ink_wash_img.save("ink_washed_" + image_path)
# 使用方法
histogram_equalization_to_inkwash("input_image.jpg")
```
这个代码片段假设你已经安装了`opencv-python`库(需要使用`pip install opencv-python-headless`),因为`cv2.threshold`函数来自OpenCV。注意实际运行时可能会有额外的依赖和调整。
阅读全文