OpenCV-Python直方图均衡化实现图像去雾


Posted in Python onJune 07, 2021

直方图均衡化

直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(HSV)的视觉均衡。

一般来说,直方图均衡化可以达到增强图像显示效果的目的。最常用的比如去雾。下面,我们来分别实现灰度图像去雾以及彩色图像去雾。

实现灰度图像去雾

在OpenCV中,它提供了函数cv2.equalizeHist()来实现直方图均衡化,该函数的完整定义如下:

def equalizeHist(src, dst=None):

src:原始图像,必须是8位单通道原始图像

dst:返回值,返回直方图均值化处理结果

下面,我们来通过该函数实现灰度图像直方图均衡化处理,代码如下:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("45.jpg", 0)
equ = cv2.equalizeHist(img)

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始图像直方图")
plt.hist(img.ravel(), 256)
plt.figure("均衡化图像直方图")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

运行之后,效果如下:

OpenCV-Python直方图均衡化实现图像去雾

左边为原图,右边是处理后的图像,可以看到图像前景的雾,基本已经去掉了。不过,我们还是看看处理前后的直方图结果分布。

OpenCV-Python直方图均衡化实现图像去雾

OpenCV-Python直方图均衡化实现图像去雾

实现彩色图像去雾

虽然上面的灰度图像达到了去雾的基本效果,但是说实话,大多数实际的场景中,我们用到最多的往往是彩色图像。所以,掌握彩色图像的直方图均衡化处理,才是我们真正的实战技能。

下面我们来用代码实现彩色图像直方图均衡化处理,代码如下:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("50.jpg")

blue = img[:, :, 0]
green = img[:, :, 1]
red = img[:, :, 2]
blue_equ = cv2.equalizeHist(blue)
green_equ = cv2.equalizeHist(green)
red_equ = cv2.equalizeHist(red)
equ = cv2.merge([blue_equ, green_equ, red_equ])

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始图像直方图")
plt.hist(img.ravel(), 256)
plt.figure("均衡化图像直方图")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

这里,我们只需要使用equalizeHist()函数对彩色图像的每个颜色进行均衡化处理即可。当然,需要注意的是,我们处理完每个颜色之后,需要将图像再次合并。运行之后效果如下:

OpenCV-Python直方图均衡化实现图像去雾

到此这篇关于OpenCV-Python直方图均衡化实现图像去雾的文章就介绍到这了,更多相关OpenCV-Python 图像去雾内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
python简单贪吃蛇开发
Jan 28 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
OpenCV-Python实现人脸磨皮算法
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
You might like
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python检测是文件还是目录的方法
2015/07/03 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
python单例模式的多种实现方法
2019/07/26 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
电大自我鉴定范文
2013/10/01 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
路政管理求职信
2014/06/18 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书