import cv2, math
import numpy as np
def AddHaze1(img):
# img_f = img # 保存文件用这行
img_f = img / 255.0 # 对原博主的代码进行了更改,这是显示时的样子
(row, col, chs) = img.shape
A = 0.5 # 亮度
beta = 0.08 # 雾的浓度
size = math.sqrt(max(row, col)) # 雾化尺寸
center = (row // 2, col // 2) # 雾化中心
for j in range(row):
for l in range(col):
d = -0.04 * math.sqrt((j - center[0]) ** 2 + (l - center[1]) ** 2) + size
td = math.exp(-beta * d)
img_f[j][l][:] = img_f[j][l][:] * td + A * (1 - td)
return img_f
def AddHaze2(img):
img_h =img/255.0 # 对原博主的代码进行了更改
A = np.random.uniform(0.6, 0.95)
t = np.random.uniform(0.3, 0.95)
img_h = img_h * t + A * (1 - t)
return img_h
def AddHaze(img):
l = np.random.uniform(0, 1)
if l > 0.7:
img_T = AddHaze1(img)
else:
img_T = AddHaze2(img)
return img_T
if __name__ == '__main__':
resize_jpg_path = r'F:\数据集/image/2.jpg'
img = cv2.imdecode(np.fromfile(resize_jpg_path, dtype=np.uint8), flags=-1)
cv2.imshow("src", img)
img_wuhua=AddHaze(img)
cv2.imshow("test",img_wuhua)
cv2.waitKey(1000)
if 1 == cv2.waitKey(0):
pass
本文参考的代码来源于https://blog.youkuaiyun.com/An_dy_code/article/details/111031999
不过按着原博主的代码,雾化后的结果,看不出来,所以进行了更改。
效果如下: