肆[4],滤波
1,简介
1.1,Opencv提供滤波处理函数
方框滤波,BoxBlur函数
均值滤波(领域平均滤波),Blur函数
高斯滤波,GaussianBlur函数
中值滤波,medianBlur函数
双边滤波,bilateralFilter函数
1.2,常见线性滤波器
低通滤波器:允许低频率通过。
高通滤波器:允许高频率通过。
带通滤波器:允许一定范围频率通过。
带阻滤波器:阻止一定范围频率通过并且允许其他频率通过。
全通滤波器:允许所有频率通过,仅仅改变相位关系。
陷波滤波器(Band-StopFilter):阻止-个狭窄频率范围通过,是一种特殊带阻滤波器。
2,目的
2.1,对噪声进行抑制
2.2,抽出对象的特征
3,均值滤波
线性滤波
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ksize):核的尺寸,正奇数
//参数4(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数5(borderType):边框类型
原理:
在图像上对目标像素给出一个内核,该内核包括了其周围的临近像素(比如以目标像素为中心的周围8(3x3-1)个像素,构成一个滤波内核,去掉目标像素本身)。再用内核中的全体像素的平均值来代替原来像素值。
缺陷:
不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点
4,方框滤波
线性滤波
CV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor = Point(-1,-1),bool normalize = true,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后的图像
//参数3(ddepth):处理后图像深度,-1代表使用原图深度
//参数4(ksize):核的尺寸,正奇数
//参数5(anchor):锚点,默认值 Point(-l-l)表示这个锚点在核的中心
//参数6(normalize):归一化处理
//参数7(borderType):边框类型
当normalize = true,结果等于均值滤波=内核像素的和 / (内核大小-1)
当normalize = false,结果计算图元像素=内核像素的和,导致像素值容易超出最大值255,截断变为255,白色图像
5,高斯滤波
线性滤波
CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数
//参数4(sigmaX):X方向上的高斯核标准偏差
//参数5(sigmaY):Y方向上的高斯核标准偏差
//参数6(borderType ):边框类型
高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波具体操作是:用一个内核(或称卷积、掩模)扫描图像中的每一个像素,用内核确定的邻域内像素的加权平均灰度值去替代内核中心像素点的值。
效果:类似经过一个半透明屏幕在观察图像
6,中值滤波
非线性滤波
CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(ksize):内核大小,正奇数
用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声、斑点噪声的同时又能保留图像的边缘细节。
与均值滤波相比:中值滤波无论是在消除l噪声还是保存边缘方面都是一个不错的方法,但是耗时是均值滤波5倍以上。耗时长
7,双边滤波
非线性滤波
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(d):表示在过滤过程中每个像素邻域的直径
//参数4(sigmaColor):颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域
//参数5(sigmaSpace):坐标空间中滤波器的sigma值,坐标空间的标注方差。它的数值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当 d>0时, d指定了邻域大小且与sigmaSpace无关。否则, d正比于sigmaSpace
//参数6(borderType):边框类型
双边滤波(Bilateralfil忧r)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的,具有简单、非法代、局部的特点。
双边滤波器的好处是可以做边缘保存。耗时长
8,形态学滤波
简单来讲,形态学操作就是基于形状的一系列图像处理操作(腐蚀/膨胀等等)。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀是图像中的高亮部分进行膨胀,类似于"领域扩张",效果图拥有比原图更大的高亮区域。腐蚀是原图中的高亮部分被腐蚀,类似于"领域被蚕食",效果图拥有比原图更小的高亮区域
8.1,膨胀
求局部最大值的操作
CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续膨胀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值
获取内核
CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));//参数1(shape):设定卷积核的形状,有三个可选值:MORPH_RECT(返回矩形卷积核)、MORPH_CROSS(返回十字形卷积核)和MORPH_ELLIPSE(返回椭圆形卷积核)
//参数2(ksize):表示卷积核有x行,y列
//参数3(anchor ):设定锚点的位置,一般设为(-1,-1),表示锚点位于核中心。
注:参数1(shape)枚举定义
enum MorphShapes {MORPH_RECT = 0, MORPH_CROSS = 1, MORPH_ELLIPSE = 2
};
8.2,腐蚀
求局部最小值的操作
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数4(anchor ):锚点
//参数5(iterations):迭代次数,如连续腐蚀几次
//参数6(borderType ):边框类型
//参数7(borderValue ):边界值
8.3,开运算
先腐蚀后膨胀。
开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,int op, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );//参数1(src):原图
//参数2(dst):处理后图像
//参数3(op):形态学操作的类型,可以是腐蚀、膨胀、开运算、闭运算、顶帽、黑帽等
//参数4(kernel):内核,可以是正方向或者矩形,可以通过cv2.getStructuringElement()函数创建
//参数5(anchor ):锚点
//参数6(iterations):迭代次数
//参数7(borderType ):边框类型
//参数8(borderValue ):边界值
注:参数3(op)枚举定义
enum MorphTypes{MORPH_ERODE = 0, MORPH_DILATE = 1, MORPH_OPEN = 2, MORPH_CLOSE = 3, MORPH_GRADIENT = 4, MORPH_TOPHAT = 5, MORPH_BLACKHAT = 6, MORPH_HITMISS = 7
};/*MORPH_ERODE //腐蚀MORPH_DILATE //膨胀MORPH_OPEN //开运算MORPH_CLOSE //闭运算MORPH_GRADIENT //梯度MORPH_TOPHAT //顶帽MORPH_BLACKHAT //黑帽MORPH_HITMISS //Hit-or-Miss 运算,是一种特殊的形态学运算,通常用于检测满足特定形状的物体
*/
8.4,闭运算
先膨胀后腐蚀。
能够排除小型黑洞(黑色区域)。
8.5,梯度
膨胀图与腐蚀图之差。
对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓。
8.6,梯度
膨胀图与腐蚀图之差。
对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓。
8.7,顶帽
原图与开运算的结果图之差。(原图 - 开运算)
开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作与选择的核的大小相关。
运算往往用来分离比邻近点亮一些的斑块。
在一副图像具有大幅的背景,而做小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
8.8,黑帽
闭运算的结果图与原图之差。(闭运算 - 原图)
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和|选择的核的大小相关。
黑帽运算用来分离比邻近点暗一些的斑块,效果图有着非常完美的轮廓。
相关文章:
肆[4],滤波
1,简介 1.1,Opencv提供滤波处理函数 方框滤波,BoxBlur函数 均值滤波(领域平均滤波),Blur函数 高斯滤波,GaussianBlur函数 中值滤波,medianBlur函数 双边滤波,bilateralFilter函数 1.2&…...
Python 包管理器入门指南
什么是 PIP? PIP 是 Python 包管理器,用于管理 Python 包或模块。注意:如果您的 Python 版本是 3.4 或更高,PIP 已经默认安装了。 什么是包? 一个包包含了一个模块所需的所有文件。模块是您可以包含在项目中的 Pyth…...
2022年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 如下所示的2行代码,最后print()函数打印出来的结果是?( ) c [[赵大,…...
配置Raspberry自动连接WIFI,在无法查看路由器的校园网情况下使用自己电脑热点
1、开启电脑热点,并共享电脑WLAN2 打开控制面板->网络和Internet->网络连接 选择自己的校园网,我这里是WLAN2,右键属性,如下操作: 如果没有看到 本地连接*10类似的图标 则按如下操作:winx键&#x…...
#stm32整理(一)flash读写
以这篇未开始我将进行stm32学习整理为期一个月左右完成stm32知识学习整理内容顺序没有一定之规写到哪想到哪想到哪写到哪,主要是扫除自己知识上的盲区完成一些基本外设操作。 以stm32f07为例子进行flash读写操作 stm32flash简介 参考资料正点原子和野火开发手册 …...
windows10编译高版本openssl
参考文章 参考文章中的windows编译为低版本,在高版本的openssl编译中已经没有:“ms\do_ms.bat”这个脚本了,现记录下编译过程 1、准备工作 安装ActivePerl,安装后会自动写入环境变量,参照参考文章测试安装成功与否&a…...
Mac之NVM|通过brew安装、更新、卸载、重新安装nvm
文章目录 导文通过brew安装NVM通过brew更新NVM通过brew卸载NVM通过brew重新安装NVM 导文 Mac之NVM 通过brew安装、更新、卸载、重新安装 通过brew安装NVM brew install nvm通过brew更新NVM brew upgrade nvm通过brew卸载NVM brew uninstall nvm通过brew重新安装NVM brew re…...
react的状态管理有哪些方法?
在React中,有多种方法可以进行状态管理,以下是其中一些常见的方法: 1:使用React的内置状态(State): React组件可以通过使用 useState 钩子来管理内部的状态。它允许你在函数组件中定义和更新状态。例如: import React, { useState } from react;function MyComponent…...
AST注入-从原型链污染到RCE
文章目录 概念漏洞Handlebarspug 例题 [湖湘杯 2021 final]vote 概念 什么是AST注入 在NodeJS中,AST经常被在JS中使用,作为template engines(引擎模版)和typescript等。对于引擎模版,结构如下图所示。 如果在JS应用中存在原型污染漏洞&…...
【开题报告】基于uniapp的在线考试小程序的设计与实现
1.研究背景 随着社会的发展和科技的进步,网络技术被广泛应用于教育领域。在线教育已成为当今发展趋势之一,其中在线考试更是具有重要的意义。传统的考试方式不仅耗费大量人力物力,而且存在考试成果的保密问题。而在线考试可以使考试过程更加…...
使用pdf2image pdf转图片
安装poppler https://wenku.csdn.net/answer/1zxh8ckp6i from pdf2image import convert_from_path, convert_from_bytes import os# https://github.com/Belval/pdf2imageoutput_folder ./ dpi_value 600 pdf_start_page 1 # pdf显示的第一页 start_page 237 # 真实页码 p…...
非关系型数据库Redis的安装【Linux】及常用命令
前言 Redis(Remote Dictionary Server)是一种开源的内存数据库管理系统,它以键值存储方式来存储数据,并且支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis最初由Salvatore Sanfilippo开发,…...
【React】02.create-react-app基础操作
文章目录 当前以及未来的开发,一定是:组件化开发如何划分组件React的工程化/组件化开发create-react-app基础运用运用react常用版本一个React项目中,默认会安装 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 当前以及…...
gcc -static 在centos stream8 和centos stream9中运行报错的解决办法
gcc -static 在centos stream8 和centos stream9中运行报错的解决办法: 报/usr/bin/ld: cannot find -lc 我们下载glibc-static: 选择x86_64的。 还有一个是libxcrypt-static,依旧在这个网站里搜。 rpm -ivh glibc-static-2.28-239.el8.x…...
【UE5 Cesium】actor随着视角远近来变化其本身大小
效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图,添加一个静态网格体组件 当事件开始运行后添加一个定时器,委托给一个自定义事件,每2s执行一次,该事件每2s获取一下“DynamicPawn”和acto…...
vue-render函数的三个参数
第一个参数(必须) - {String | Object | Function} Vue.component(elem, {render: function(createElement) {return createElement(div);//一个HTML标签字符/*return createElement({template: <div></div>//组件选项对象});*//*var func function() {return {t…...
数据结构与算法(Java版) | 排序算法的介绍与分类
各位朋友,现在我们即将要进入数据结构与算法(Java版)这一系列教程中的排序算法这一章节内容的学习中了,所以还请大家系好安全带,跟随我准备出发吧! 相信诸位应该都知道排序算法有很多种吧!就算没…...
Java 实现uniapp本机手机号一键登录
这里简单的贴一下后端的解析代码 其他配置项参照uniapp的官方文档配置就好了 这里的accessToken和openid是前端请求uCloud获取的 Data public class UniAppLoginVO {private Integer code;private String message;private ResultDataVO data;private Boolean success;private R…...
树莓派使用Nginx搭建web网站内存利用太低了?高效远程访问试试结合内网穿透进行
🎬 鸽芷咕:个人主页 🔥 个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一. Nginx安装步骤1.安装更新2.更新完成后安装Nginx 包3. 启动Nginx 二. 安装cpolar内网穿透工具1. 使用cpolar一…...
基于SSM的搬家预约系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
CSS线性渐变实战:5分钟搞定炫酷按钮背景(附完整代码)
CSS线性渐变实战:5分钟搞定炫酷按钮背景(附完整代码) 最近在重构一个企业官网时,产品经理突然要求把所有按钮的纯色背景换成"更有设计感"的效果。面对30多个不同尺寸的按钮,手动设计图片背景显然不现实。这时…...
【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)
目录 Undo Log日志 Redo Log日志 Redo Log与Bin Log的区别 Bin Log日志 三大日志全流程 Undo Log日志 一、核心定义 Undo Log 是MySQL InnoDB存储引擎特有的事务回滚日志,核心作用是记录事务执行前的数据版本,用于事务回滚、MVCC实现,是…...
5分钟解决经典游戏兼容性问题:DDrawCompat完整使用指南
5分钟解决经典游戏兼容性问题:DDrawCompat完整使用指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…...
SpringBoot WebSocket 客户端断线重连:从心跳检测到优雅恢复
1. WebSocket与实时通信的挑战 想象一下你正在玩一款多人在线游戏,突然网络卡顿导致角色掉线,重新登录后发现之前的战斗进度全部丢失——这种糟糕体验正是WebSocket重连机制要解决的问题。WebSocket作为HTTP的"升级版",确实解决了服…...
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷 第一次用熵值法做综合评价时,我盯着屏幕上几乎相同的权重值发愣——这和教科书上"差异越大权重越高"的描述完全不符。直到深夜排查才发现,原来在数据标…...
Anaconda 被误删后抢救手册:零重装、10 分钟极速恢复
引言 作为 Python 开发者、数据分析师、AI 学习者的「必备工具」,Anaconda 凭借便捷的环境管理、海量预安装包,成为入门与进阶的首选。但很多人曾因误操作 —— 比如清理 C 盘时删掉anaconda3文件夹、卸载时选错路径、甚至误删系统环境变量 —— 导致co…...
CAD工程师必看:如何用De Boor算法优化B样条曲线设计(附NURBS对比)
CAD工程师必看:如何用De Boor算法优化B样条曲线设计(附NURBS对比) 在工业设计领域,曲线建模的精度与效率直接决定了产品从概念到成品的转化质量。作为CAD工程师,我们常常需要在设计自由度和计算效率之间寻找平衡点——…...
告别混乱:我是如何用Hugo + GitHub Actions实现博客自动化构建与发布的
告别混乱:我是如何用Hugo GitHub Actions实现博客自动化构建与发布的 去年我的博客还处于"石器时代"——每次写完文章都要手动执行hugo build,再把public文件夹里的文件拖到服务器。直到某天连续三次忘记更新CNAME文件导致域名解析失败&#…...
终极Modbus测试工具:OpenModScan让工业通讯调试变得前所未有的简单
终极Modbus测试工具:OpenModScan让工业通讯调试变得前所未有的简单 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化领域,Modbus协议…...
5个创新方法:基于开源工具的内容访问优化方案
5个创新方法:基于开源工具的内容访问优化方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,合法访问优质内容成为信息获取的关键挑战。…...
