opencv实现视频实时去雾算法



现在一系列的文章,有不少算法都于去雾有关,比如限制对比度自适应直方图均衡化算法原理、实现及效果、局部自适应自动色阶/对比度算法在图像增强上的应用这两个增强算法都有一定的去雾能力,而最直接的就是《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他 一文,描述了暗通道去雾这一state-of-the-art algorithms的过程和实现,虽几经优化,对于常用的视频1024*768大小的图片,算法处理部分还是需要70MS的时间(I7 笔记本CPU),因此,这一算法用于实时要求时还有一定的难度,并且优化后的算法基本无法并行,而可并行的算法重复计算大,由于不熟悉GPU方面的理念,不晓得使用不优化的算法靠GPU是否能有多大速度的提升。
为此,我一直在找寻相关的论文,这种找寻的踪迹一般就是看到一篇好论文–》看其参考文献–》再看参考文献的参考文献,这样循环下去。 然后有某种机会或巧合,又看到一篇好论文,重复前面的过程,你就会发现很多交集,慢慢的就会有一些好运向你招手。 话说我原本只看英文的文献,所以一直忽略了国内的文章,前几日,一个QQ朋友推荐了一篇清华大学的论文,下载后稍微看了下,觉得其描述的结果还是比较吸引人的,于是就实现了下,实时的效果应该说很不错,这里就简单的介绍并推荐给大家。
算法原理没有什么复杂的地方,其实说原理,还不如说经验或实验,因为论文中可以用理论来推导的公式确实不多。不过这也没关系,有用的东西就应该拿来用

这里写图片描述

# -*- coding: utf-8 -*-

from package_2 import autolevel
import cv2

#cap = cv2.VideoCapture('LP_20170318104820.avi')
cap = cv2.VideoCapture('test.avi')
original_name = 'original'
dehaze_name = 'dehaze'
cv2.namedWindow(original_name,cv2.WINDOW_NORMAL)
cv2.namedWindow(dehaze_name,cv2.WINDOW_NORMAL)

def nop():
    pass
#def handle():
cv2.createTrackbar('lowcut',dehaze_name,0,100,nop)
cv2.createTrackbar('highcut',dehaze_name,0,250,nop)
success,frame = cap.read()
iframe = frame
while not success:
    success,frame = cap.read()
    iframe = frame

while success:
    cv2.imshow(original_name,frame)
    lowcut = cv2.getTrackbarPos('lowcut',dehaze_name)/1000.0
    highcut = cv2.getTrackbarPos('highcut',dehaze_name)/1000.0
    img_autolevel = autolevel.AutoLevel(frame,lowcut,highcut)
    img_autolevel_result = img_autolevel.autolevel()
    cv2.imshow(dehaze_name,img_autolevel_result)

    # img_autocontrast = autocontrast.AutoContrast(frame,lowcut,highcut)
    # img_autocontrast_result = img_autocontrast.autocontrast()
    # cv2.imshow(dehaze_name,img_autocontrast_result)

    if cv2.waitKey(1)&0xff == ord('q'):
        break

    success,frame = cap.read()

cv2.destroyAllWindows()

这里有个包,小博放在linux系统下,有时间马上上传