您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:OpenCV-Python直方图均衡化实现图像去雾

51自学网 2021-10-30 22:29:45
  python
这篇教程OpenCV-Python直方图均衡化实现图像去雾写得很实用,希望能帮到您。

直方图均衡化

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

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

实现灰度图像去雾

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

def equalizeHist(src, dst=None):

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

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

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

import cv2import matplotlib.pyplot as pltimg = 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()

运行之后,效果如下:

在这里插入图片描述

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

原始图像

处理后的图像

实现彩色图像去雾

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

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

import cv2import matplotlib.pyplot as pltimg = 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 图像去雾内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


OpenCV-Python实现人脸磨皮算法
python 爬取哔哩哔哩up主信息和投稿视频
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。