基于opencv的单张图像去雾算法(三)

本文介绍了如何使用opencv实现单张图像的去雾处理,并结合自动色阶算法调整图像亮度。在去雾过程中,通过导向滤波算法保持了图像细节,但发现去雾后图像较暗。通过RGB三通道的灰度拉伸解决这一问题。在实践中,遇到opencv的split()和merge()函数使用数组类型避免了指针越界的问题,同时调整了graystretch函数参数以适应图像偏暗的情况。尽管某些情况下,如大面积白色物体或能见度极低的雾天,去雾效果不理想,但对于轻度雾天的图像,现有算法能有效改善视觉效果。
摘要由CSDN通过智能技术生成

       导向滤波算法基本已取得不错的效果,保留完整细节信息。观察去雾后的图像其亮度要比原图要低。那是因为物体光线的亮度通常不及大气光线。看一些论文里提到了自动色阶算法。查阅资料发现其就是RGB三通道进行灰度拉伸。

     实现过程中使用opencv的通道分离和和合并函数并结合普通的灰度拉伸函数就可以实现 RGB三通道灰度拉伸


实现代码:

int main()
{
//[6] --自动色阶(rgb三通道灰度拉伸)
    cv::Mat channels[3];
    split(deFog1,channels);//不知道什么原因vector无法使用 只能用数组来表示
    for(int c=0;c<3;c++)
        channels[c]= grayStretch(channels[c],0.001,0.5); //根据实验 暗色像素的比例应该设置的较小效果会比较好
    merge(channels,3,deFog1);
    imshow("autoLevels",deFog1);
    //[6]
}
//图像灰度拉伸
//src 灰度图图
//lowcut、highcut为百分比的值 如lowcut=3表示3%
//lowcut表示暗色像素个数的最小比例,大于该比例的灰度级作为最小亮度
//highcut为高亮像素个数的最小比例,大于该比例的灰度级作为最大亮度
cv::Mat grayStretch(cv::Mat src,double lowcut,double highcu
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值