OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)

简介: OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

一、高斯滤波器

高斯滤波也被称为高斯模糊或者高斯平滑,是目前应用最广泛的平滑处理算法,高斯滤波可以很好的在降低图片噪声,细节层次的同时保留更多的图像信息,经过处理的图像呈现磨砂玻璃的滤镜效果

在高斯滤波中,越靠近核心的像素权重越大,越远离核心的像素权重越小,高斯滤波的计算过程涉及卷积运算,会有一个与滤波核带线啊哦相等的卷积核,卷积核中保存的值就是核所覆盖区域的权重值

像素与卷积核进行卷积计算

opencv将高斯滤波器封装成了GaussianBlur方法 语法格式如下

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

sigmaX 卷积核水平方向的标准差

sigmaY 卷积核垂直方向的标准差

修改sigmaX或者sigmaY的值都可以改变卷积核中的权重比例,也可以设置为0,该方法会根据滤波核的大小自动计算合适的权重比例

下面对花朵图像进行高斯滤波处理

滤波核越大,处理之后的图像就越模糊,和均值滤波,中值滤波处理的图像相比,高斯滤波处理的图像更加平滑,保留的图像更多,更容易辨认

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GasianBlur(img, (5, 5), 0, 0)  # 使用大小为5*5的滤波核进行高斯滤波
dst2 = cv2.GaianBlur(img, (9, 9), 0, 0)  # 使用大小为9*9的滤波核进行高斯滤波
dst3 = cv2.GaussianBlur(img, (15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
cv2.imshow("im", img)  # 显示原图
cv2.imshw("5", dst1)  # 显示滤波效果
cv2.imshow("9", dst2)
cv2.imshw("15", dst3)
cv2.waitKey()  # 按下任何键盘按键后
cv2.deroyAllWindows()  # 释放所有窗体

二、双边滤波器

上面几种滤波方法都会使整幅图像变得平滑,图像中的边界会变得模糊不清,双边滤波使一种在平滑处理过程中可以有效保护边界信息的滤波操作方法。

双边滤波器自动判断滤波核处于平坦区域还是边缘区域,如果滤波核处于平坦区域,则会使用类似高斯滤波的算法进行滤波,如果滤波核处于边缘区域,则加大边缘像素的权重,尽可能地让这些像素值保持不变

opencv将双边滤波器封装成bilateralFilter方法 语法格式如下

dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)

d 以当前像素为中心的整个滤波区域的直径

sigmaColor 参与计算的颜色范围,这个值使像素颜色值与周围颜色值的最大差值,只有颜色值之差小于这个值时,周围的像素才进行滤波计算,值为255时,表示所有颜色都参与计算

sigmaspace 该值越大 参与计算的像素数量就越多

下面对比高斯滤波和双边滤波的处理效果

可见双边滤波明显清晰一些,并且边界信息保存的更好

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GauianBlur(img(15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
# 双边滤波取范围直径为15,颜色差为120
dst2 = cv2.bilateralFilter(img, 15, 120, 100)
cv2.imshow("img", img)  #示原图
cv2.imshow(auss", dst1)  # 显示高斯滤波效果
cv2.show("bilateral", dst2)  # 显示双边滤波效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAWindows()  # 释放所有窗体

总结

噪声指的是一幅图像内部的、高亮度的像素点。图像平滑处理是指在尽量保留原图像信息的情况下,去除图像内部的这些高亮度的像素点(即“噪声”)。为了实现图像平滑处理,需要的工具就是滤波器。虽然每种滤波器的实现原理都不同,但是每种滤波器都能对图像进行图像平滑处理

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
2月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
基于qt的opencv实时图像处理框架FastCvLearn实战
|
2月前
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
126 9
基于QT的OCR和opencv融合框架FastOCRLearn实战
|
29天前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
42 3
|
1月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
58 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
131 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
20天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
1月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
92 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
66 2
|
2月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
44 10
|
3月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
481 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达