opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑
文章目录
- 平滑图像
- 目标
- 2D 卷积(图像过滤)
- 图像模糊(图像平滑)
- 1. 平均
- 2. 高斯模糊
- 3. 中值模糊
- 4. 双边滤波
- 其他资源
平滑图像
目标
学习:
- 使用各种低通滤波器模糊图像
- 将定制滤波器应用于图像(2D 卷积)
2D 卷积(图像过滤)
与一维信号一样,图像也可以使用各种低通滤波器 (LPF)、高通滤波器 (HPF) 等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中查找边缘。
OpenCV 提供了一个函数 cv.filter2D() 来将内核与图像进行卷积。作为示例,我们将在图像上尝试平均滤波器。 5x5 平均滤波器内核如下所示:
[ K = 1 25 [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ] ] [K = \frac{1}{25} \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \end{bmatrix}] [K=251 1111111111111111111111111 ]
操作如下:将此内核保持在像素上方,添加此内核下方的所有 25 个像素,取平均值,并用新的平均值替换中心像素。此操作将对图像中的所有像素继续进行。尝试此代码并检查结果:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as pltimg = cv.imread('opencv_logo.png')kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
结果:

图像模糊(图像平滑)
图像模糊是通过将图像与低通滤波器内核进行卷积来实现的。它对于去除噪声很有用。它实际上从图像中去除了高频内容(例如:噪声、边缘)。因此,在此操作中,边缘会稍微模糊一些(也有模糊技术不会模糊边缘)。OpenCV 提供了四种主要类型的模糊技术。
1. 平均
这是通过将图像与标准化盒式滤波器进行卷积来实现的。它只是取内核区域下所有像素的平均值并替换中心元素。这是通过函数 cv.blur() 或 cv.boxFilter() 完成的。查看文档以了解有关内核的更多详细信息。我们应该指定内核的宽度和高度。 3x3 标准化盒式过滤器如下所示:
[ K = 1 9 [ 1 1 1 1 1 1 1 1 1 ] ] [K = \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}] [K=91 111111111 ]
@note 如果您不想使用标准化盒式过滤器,请使用 cv.boxFilter()。将参数 normalize=False 传递给函数。
查看下面的示例演示,其中内核大小为 5x5:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread('opencv-logo-white.png')blur = cv.blur(img,(5,5))plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
结果:

2. 高斯模糊
在此方法中,不使用盒式滤波器,而是使用高斯核。它通过函数 cv.GaussianBlur() 完成。我们应该指定核的宽度和高度,它们应该是正数和奇数。我们还应该分别指定 X 和 Y 方向的标准偏差 sigmaX 和 sigmaY。如果仅指定 sigmaX,则 sigmaY 与 sigmaX 相同。如果两者都为零,则根据核大小计算它们。高斯模糊在从图像中去除高斯噪声方面非常有效。
如果需要,您可以使用函数 cv.getGaussianKernel() 创建高斯核。
可以修改上述代码以进行高斯模糊:
blur = cv.GaussianBlur(img,(5,5),0)
结果:

3. 中值模糊
这里,函数 cv.medianBlur() 取核区域下所有像素的中值,并将中心元素替换为该中值。这对消除图像中的椒盐噪声非常有效。有趣的是,在上述过滤器中,中心元素是一个新计算的值,可能是图像中的像素值或新值。但在中值模糊中,中心元素总是被图像中的某个像素值替换。它有效地降低了噪声。其核大小应为正奇数。
在此演示中,我在原始图像中添加了 50% 的噪声并应用了中值模糊。检查结果:
median = cv.medianBlur(img,5)
结果:

4. 双边滤波
cv.bilateralFilter() 在去除噪声的同时保持边缘清晰,效果非常好。但与其他滤波器相比,该操作速度较慢。我们已经看到,高斯滤波器取像素周围的邻域并找到其高斯加权平均值。此高斯滤波器仅是空间函数,即在滤波时考虑邻近像素。它不考虑像素是否具有几乎相同的强度。它不考虑像素是否是边缘像素。因此,它还会模糊边缘,这是我们不想做的。
双边滤波也采用空间高斯滤波器,但多了一个高斯滤波器,它是像素差异的函数。空间高斯函数确保仅考虑邻近像素进行模糊,而强度差异高斯函数确保仅考虑与中心像素具有相似强度的像素进行模糊。因此它保留了边缘,因为边缘处的像素将具有较大的强度变化。
以下示例显示了双边滤波器的使用(有关参数的详细信息,请访问文档)。
blur = cv.bilateralFilter(img,9,75,75)
结果:

看,表面上的纹理消失了,但边缘仍然保留了下来。
其他资源
- 有关 双边过滤 的详细信息
相关文章:
opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑
文章目录 平滑图像目标2D 卷积(图像过滤)图像模糊(图像平滑)1. 平均2. 高斯模糊3. 中值模糊4. 双边滤波 其他资源 平滑图像 目标 学习: 使用各种低通滤波器模糊图像将定制滤波器应用于图像(2D 卷积&…...
精华帖分享|缠论系列 -笔
本文来源于量化小论坛策略分享会板块精华帖,作者为吴奕萱,发布于2023年6月4日。 以下为精华帖正文: 01 笔 昨天讲了3根K线组合关系的完全分类,按照逻辑,其实我们会考虑是不是应该讲4根、5根K线的组合关系了。 精华帖…...
Java项目实战II基于Spring Boot的文理医院预约挂号系统的设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在医疗资源日益紧张的背景下࿰…...
NumPy Ndarray学习
1.NumPy Ndarray 对象简介 NumPy 最重要的特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。 2.N…...
Browserslist 配置
Browserslist 是一个工具和规范,用于定义和共享支持的浏览器列表,以便在前端开发中管理不同工具的兼容性。这些工具可以包括 Babel、Autoprefixer、ESLint 等,它们都可以使用 Browserslist 提供的配置来确定应支持哪些浏览器及其版本。 主要…...
vue2中的v-bind相当于原生js的什么
在 Vue 2 中,v-bind 是一个指令,用于动态地将一个或多个属性绑定到 DOM 元素上。它相当于在原生 JavaScript 中直接操作 DOM 元素属性的方法。 v-bind 的基本用法 在 Vue 中,v-bind 可以这样使用: <!-- 绑定一个属性 -->…...
c语言-scanf函数的用法
文章目录 一、scanf是什么?二、通过scanf进行赋值scanf 输入一段带空格的句子, %[^\n] 格式字符串。 三、赋值忽略符 一、scanf是什么? 函数原型:int scanf ( const char * format, … ); scanf是一个格式输出库函数,…...
AI带货主播插件开发之商品推荐模块!
AI带货主播,作为新兴的人工智能技术应用领域,正逐渐改变着电商直播的格局,在这一领域,商品推荐模块是提升用户体验、增加销售额的关键一环。 本文将探讨AI带货主播插件的商品推荐模块开发,并分享五段关键的源代码&…...
使用Nginx作为反向代理和负载均衡器
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…...
【数据结构二叉树】C非递归算法实现二叉树的先序、中序、后序遍历
引言: 遍历二叉树:指按某条搜索路径巡访二叉树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 除了层次遍历外,二叉树有三个重要的遍历方法:先序遍历、中序遍历、后序遍历。 1、递归算法实现先序、中序、后…...
解决网盘资源搜索难题的利器——全面解析哎哟喂啊盘搜及其优秀推荐平台
海量的资源让我们的选择更加丰富,但同时也带来了资源搜索的诸多痛点。无论是寻找最新的影视资源、软件工具,还是各类学习资料,用户常常面临以下几个问题: 资源更新不及时:很多平台资源更新缓慢,用户难以第一时间获取最新内容。 搜索效率低下:关键词搜索不精准,导致需要翻阅大量…...
草料二维码:低成本高效率的访客管理解决方案
在当前的商业和政治环境中,企业和政府机构越来越重视安全保密措施,尤其是对外来人员的行踪记录和管理。访客管理已成为企业运营中不可或缺的一环,它不仅提升了安全性,还增强了效率和便捷性。然而,许多机构仍在使用传统…...
qt管理系统框架(好看界面、漂亮界面、好看的界面、漂亮的界面)
概述 最近一个项目用QT开发,然后找了美工帮设计了下界面。总算完工,后想一下干脆抽出一个基础框架,方便以后用。 功能 支持mysql、echarts。 支持加载动态权限菜单,轻松权限控制。 支持遮罩对话框、抽屉 支持开机启动动画界面 内…...
在VSCode中读取Markdown文件
在VSCode安装Markdown All in One或Markdown Preview Enhanced即可 插件Markdown All in One GitHub:https://github.com/yzhang-gh/vscode-markdown v3.6.2下载链接:https://marketplace.visualstudio.com/_apis/public/gallery/publishers/yzhang/vs…...
Linux rabbitmq客户端 SimpleAmqpClient 源码编译
SimpleAmqpClient的编译成库,加入到工程中 1、下载SimpleAmqpClient 源码: git克隆的路径为:https://github.com/alanxz/SimpleAmqpClient.git 下载压缩包路径:https://codeload.github.com/alanxz/SimpleAmqpClient/zip/maste…...
一台手机可以登录运营多少个TikTok账号?
很多TikTok内容创作者和商家通过运营多个账号来实现品牌曝光和产品销售,这种矩阵运营方式需要一定的技巧和设备成本,那么对于很多新手来说,一台手机可以登录和运营多少个TikTok账号呢? 一、运营TikTok账号的数量限制 TikTok的官…...
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 房屋信息详情 个人中心 管理员登录界面 管理员功能界面 用户管理界面 房屋信…...
k8s Service四层负载:服务端口暴露
在 Kubernetes 中,通过 Service 可以实现四层(L4)负载均衡,将流量分发至后端的 Pod。四层负载主要用于传输层(TCP/UDP),而不像七层负载均衡(HTTP/HTTPS)那样进行应用层的…...
QT 关于mousePressEvent无法过滤
QT 关于mousePressEvent无法过滤 bool Filter::eventFilter(QObject *watched, QEvent *event) {// 判断是不是点击事件if((event->type() QEvent::MouseButtonPress) || (event->type() QEvent::MouseButtonDblClick)){//打印一个全局变量static int globalVar 0;gl…...
【VScode】深度对比:Cursor与VScode(CodeMoss)工具,谁才是你的GPT编程最佳助手?
文章目录 一、Cursor的强大功能1.1 Cursor的主要特点1.2 Cursor的使用技巧 二、CodeMoss的功能2.1 CodeMoss的主要特点2.2 CodeMoss的使用技巧 三、Cursor与CodeMoss的对比分析3.1 功能对比3.2 性能对比 四、总结与展望 在科技迅猛发展的今天,AI编程工具如雨后春笋般…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
