给出一个python图像去雾代码
时间: 2023-11-12 21:04:36 浏览: 82
图像去雾处理python代码.rar
以下是一个简单的 Python 图像去雾代码:
```python
import cv2
import numpy as np
def dehaze(img, tmin=0.1, Amax=220, w=15):
# 转换为浮点数类型
img = img.astype(np.float64) / 255.0
# 计算暗通道
min_channel = np.min(img, axis=2)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (w, w))
dark_channel = cv2.erode(min_channel, kernel)
# 估计大气光
h, w = min_channel.shape[:2]
flat_img = img.reshape((h * w, 3))
flat_dark = dark_channel.ravel()
top_n = int(h * w * tmin)
max_dark_index = np.argpartition(flat_dark, -top_n)[-top_n:]
max_dark_pixels = flat_img[max_dark_index]
A = np.max(max_dark_pixels, axis=0)
# 估计透射率
epsilon = 0.0001
t = 1 - epsilon * cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) / np.linalg.norm(A)
# 修复值
t[t < tmin] = tmin
t = cv2.blur(t, (w, w))
t[t > 1] = 1
# 进行去雾
J = np.zeros_like(img)
for i in range(3):
J[:, :, i] = (img[:, :, i] - A[i]) / t + A[i]
# 限制值
J[J > 1] = 1
J[J < 0] = 0
# 转换为 8 位图像
J = (J * 255).astype(np.uint8)
return J
```
使用方法:
```python
# 读取图像
img = cv2.imread('input.png')
# 进行去雾
result = dehaze(img)
# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中 `input.png` 为输入图像路径。
阅读全文