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()  # 释放所有窗体

总结

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

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

目录
打赏
0
0
0
0
146
分享
相关文章
Python实战:搭建短信转发器,实现验证码自动接收与处理
在移动互联网时代,短信验证码是重要的安全手段,但手动输入效率低且易出错。本文介绍如何用Python搭建短信转发器,实现验证码自动接收、识别与转发。通过ADB工具监听短信、正则表达式或ddddocr库提取验证码,并利用Flask框架转发数据。系统支持多设备运行,具备安全性与性能优化功能,适合自动化需求场景。未来可扩展更多功能,提升智能化水平。
31 1
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
源码安装Python学会有用还能装逼 | 解决各种坑
相信朋友们都看过这个零基础学习Python的开篇了
492 0
源码安装Python学会有用还能装逼 | 解决各种坑
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
14天前
|
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
25 4