用python图像去雾的代码
时间: 2023-11-12 18:07:37 浏览: 82
以下是一份Python图像去雾的代码示例:
``` python
import cv2
import numpy as np
def main():
# 读入输入图像
img = cv2.imread('input.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 扩展图像的边缘,添加边缘
gray = cv2.copyMakeBorder(gray, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=(255,255,255))
# 应用高斯滤波
blur = cv2.GaussianBlur(gray, (21, 21), 0)
# 计算原始图像与滤波后的图像的差异
diff = 255 - cv2.absdiff(gray, blur)
# 根据差异计算二值图像
norm = cv2.normalize(diff, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
_, thresh = cv2.threshold(norm, 200, 255, cv2.THRESH_BINARY)
# 在二值图像上应用形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
# 移除添加的边缘
mask = cv2.erode(morph, None, iterations=10)
mask = cv2.dilate(mask, None, iterations=10)
# 应用掩码,得到图像去雾结果
result = cv2.inpaint(img, mask, 5, cv2.INPAINT_TELEA)
# 保存输出图像
cv2.imwrite('output.jpg', result)
if __name__ == '__main__':
main()
```
以上代码通过应用高斯滤波和形态学操作,实现了对输入图像的去雾操作。具体步骤包括:
1. 读入输入图像,并将其转换为灰度图像。
2. 扩展图像的边缘,添加边缘。
3. 应用高斯滤波,得到滤波后的图像。
4. 计算原始图像与滤波后的图像的差异,并根据差异计算二值图像。
5. 在二值图像上应用形态学操作,得到掩码。
6. 应用掩码,得到图像去雾结果。
7. 保存输出图像。
请注意,这里的代码仅作示例之用,并不能完全适用于所有场景。在实际应用中,需要根据具体问题进行调整和优化。
阅读全文