OpenCV平滑处理的实现示例

 更新时间:2024年02月02日 10:55:55   作者:KAIs32  
本文主要介绍了OpenCV平滑处理的实现示例,Opencv中滤波方式可分为均值滤波、高斯滤波和中值滤波,具有一定的参考价值,感兴趣的可以了解一下

前言

当我们用树莓派进行opencv图像处理时,摄像头所获取的图像质量通常会有所下降,此时,需要多种手段来优化图像的质量,提高图像识别的准度。今天所记录的是当图片经过传输等过程后出现的图像噪声现象及对应解决方法——平滑

一、图像噪声

在数字图像的采集、处理和传输过程中,可能会受到各种噪声干扰,这会导致图像质量下降、图像变得模糊,甚至使图像的特征难以辨认。为了增强图像的质量,我们需要对图像进行平滑处理,以去除这些噪声的影响。常见的图像噪声包括椒盐噪声高斯噪声等。

(1)椒盐噪声

椒盐噪声也称为脉冲噪声,是一种随机出现的白点或黑点,具体表现为亮的区域有黑色像素,或是暗的区域有白色像素,又或是两者皆有

下图中,左图为原图像右图为添加椒盐噪声的图像

(2)高斯噪声

高斯噪声是指概率密度函数服从高斯分布(正态分布)的一类噪声

下图中,左图为原图像右图为添加高斯噪声的图像

二、图像平滑处理

从信号处理的角度分析,图像平滑就是去除其中的高频信息保留低频信息,即可以通过低通滤波来去除图像中的噪声,实现对图像的平滑处理。 根据滤波器的不同,滤波方式可分为均值滤波、高斯滤波和中值滤波

(一)均值滤波

均值滤波就是对图像的所有像素点进行取均值,即以一个方形区域为单位,将该区域的中心像素点赋值为区域内所有像素点的平均值。如图所示3*3矩形,中心值为235,这个值由于过大,会形成黑点,即噪声图像,为了消除噪声,将这个点重新设置为以它为中心的九个点的平均值,即:

(23+98+168+46+235+2+67+55+211)\div 9 = 100.5

均值滤波是一种简单的滤波方法,尤其对高斯噪声的消除有较好的作用,但通常会使图像的细节变的稍微模糊,在需要观察图像细节时不建议使用均值滤波

均值滤波处理函数如下:

cv2.blur(scr, ksize)

其中的两个参数分别为:

(1)“scr”, 要处理的图像

(2) “ksize”, 滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

(二)高斯滤波

高斯滤波就是对图像的所有像素点进行加权平均,即以一个方形区域为单位,将其中心像素点赋值为该区域的加权平均值:

23*0.05+98*0.1+168*0.05+46*0.1+235*0.4+2*0.1+67*0.5+55*0.1+211*0.05 = 137

高斯滤波考虑了像素周围邻域的距离,使得离中心像素更近的像素具有更高的权重,可以有效地去除噪声,同时保留图像的边缘和细节

高斯滤波处理函数如下:

cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)

其中的五个参数分别为:

(1)“src”, 要处理的图像

(2)“ksize”, 高斯滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

(3)“sigmaX”, X方向的高斯核标准差,通常可以写为0或者不写

(4)“sigmaY”, Y方向的高斯核标准差,如果sigmaY为0,则默认与sigmaX相同

(5)“borderType”, 边界处理类型,用于处理滤波核超出图像边界的情况

(三)中值滤波

中值滤波就是对图像的所有像素点进行取中值,即以一个方形区域为单位,将其中心像素点赋值为该区域的中值。例如下图所示3*3矩形中:2、23、46、55、67、98、168、211、235,其中67为中值,所以将中心设置为67

中值滤波是一种非线性滤波方法,对于去除椒盐噪声等椒盐噪声非常有效,但可能会导致图像细节模糊

中值滤波处理函数如下:

cv2.medianBlur(src, ksize)

(1)“scr”, 要处理的图像

(2) “ksize”, 滤波核的大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的滤波核

三、完整应用代码

三种滤波方法的具体应用代码如下:

import cv2

# 图像读取
img = cv2.imread('noise.jpg')

# 图像平滑
blur1 = cv2.blur(img, (5, 5))               # 均值滤波
blur2 = cv2.GaussianBlur(img, (5, 5), 1)    # 高斯滤波
blur3 = cv2.medianBlur(img, 5)              # 中值滤波

# 图像显示
cv2.imshow('image1', img)
cv2.imshow('image2', blur1)
cv2.imshow('image3', blur2)
cv2.imshow('image4', blur3)
cv2.waitKey(0)
cv2.destroyAllWindows()

到此这篇关于OpenCV平滑处理的实现示例的文章就介绍到这了,更多相关OpenCV平滑处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下把Python3设为默认Python版本的三种方法

    Linux下把Python3设为默认Python版本的三种方法

    这篇文章主要给大家介绍了关于Linux下把Python3设为默认Python版本的三种方法,在大部分开发过程中,我们需要使用到python3进行测试,于是下载安装python3,近乎是一种刚需,至于设置默认python指向python3可以参考本文
    2023-09-09
  • python3使用flask编写注册post接口的方法

    python3使用flask编写注册post接口的方法

    今天小编就为大家分享一篇python3使用flask编写注册post接口的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python发送email的3种方法

    Python发送email的3种方法

    这篇文章主要介绍了Python发送email的3种方法,本文讲解了使用登录邮件服务器方法、调用sendmail命令、使用smtp服务来发送三种方法,需要的朋友可以参考下
    2015-04-04
  • python 函数内部修改外部变量的方法

    python 函数内部修改外部变量的方法

    今天小编就为大家分享一篇python 函数内部修改外部变量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python中json格式数据输出的简单实现方法

    python中json格式数据输出的简单实现方法

    下面小编就为大家带来一篇python中json格式数据输出的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 使用Python检测文章抄袭及去重算法原理解析

    使用Python检测文章抄袭及去重算法原理解析

    文章去重(或叫网页去重)是根据文章(或网页)的文字内容来判断多个文章之间是否重复。这篇文章主要介绍了用Python写了个检测文章抄袭,详谈去重算法原理,需要的朋友可以参考下
    2019-06-06
  • Python 提速器numba

    Python 提速器numba

    这篇文章主要介绍了Python 提速器numba,相信大部分人都感叹过python 真的太好用了,但是它真的好慢啊,然而今天我们就来用numba解决Python 慢的这个问题,需要的朋友可以参考一下
    2022-01-01
  • python实现一个点绕另一个点旋转后的坐标

    python实现一个点绕另一个点旋转后的坐标

    今天小编就为大家分享一篇python实现一个点绕另一个点旋转后的坐标,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • numpy取反操作符和Boolean类型与0-1表示方式

    numpy取反操作符和Boolean类型与0-1表示方式

    这篇文章主要介绍了numpy取反操作符和Boolean类型与0-1表示方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • python实现简单淘宝秒杀功能

    python实现简单淘宝秒杀功能

    这篇文章主要为大家详细介绍了python实现简单淘宝秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论