图像去雾是图像处理中的一个重要任务,下面是一个简单的图像去雾的示例代码,基于单幅图像去雾的方法。
import cv2
import numpy as np
def dehaze(image, tmin=0.1, A=1.2):
# 转换为浮点数类型
image = np.array(image, dtype=np.float64) / 255.0
# 估计透射率
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
dark_channel = np.min(image, axis=2)
dark_channel = cv2.blur(dark_channel, (15, 15))
dark_channel_idx = np.argsort(dark_channel.reshape(-1))
dark_channel_idx = dark_channel_idx[:int(dark_channel.size * 0.001)]
t_estimate = np.max(gray_image) - A * dark_channel
t_estimate = np.clip(t_estimate, tmin, 1)
# 恢复图像
J = np.zeros_like(image)
for i in range(3):
J[:, :, i] = (image[:, :, i] - A) / t_estimate + A
J = np.clip(J, 0, 1) * 255.0
J = np.array(J, dtype=np.uint8)
return J
# 读取图像
input_image = cv2.imread('input_image.jpg')
# 图像去雾
output_image = dehaze(input_image)
# 显示原始图像和去雾后的图像
cv2.imshow('Original Image', input_image)
cv2.imshow('Dehazed Image', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像去雾的代码实战