肆[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项目:是 目录…...

(论文阅读13/100)R-CNN minus R
文献阅读笔记 简介 题目 R-CNN minus R 作者 Karel Lenc Andrea Vedaldi 原文链接 https://arxiv.org/pdf/1506.06981.pdf 关键词 Null 研究问题 proposal generation在基于CNN的探测器中的作用,以确定它是否是一个必要的建模组件。 R-CNN留下的几个有趣…...

Jmeter和Postman哪个做接口测试会更好
软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的,所以今天我们就来谈谈一大部分人在做的接口测试,小白变高手…...

【算法|二分查找No.2】leetcode 69. x 的平方根
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...

AI:56-基于深度学习的微表情识别
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

Jetpack Compose 中下拉框实现
下拉菜单主要 以下三种实现: ExperimentalMaterialApi Composable fun ExposedDropdownMenuBox(expanded: Boolean,onExpandedChange: (Boolean) -> Unit,modifier: Modifier Modifier,content: Composable ExposedDropdownMenuBoxScope.() -> Unit )实现代…...

输出最长公共字串
题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列 示例 示例 1: 输入:text1 "abcde", text2 "ace" 输出:"ace" 示例 2: 输入:text1 &quo…...

学习经验分享【NO.19】YOLOv5可视化训练过程
将train.py中project的参数设置为如下: 点击AutoPanel即可: 得到如下的训练过程,可以观察所进行提升效果是否有用以及可以作为论文中的图,提高论文的档次。...

低代码可视化逻辑编排工具:JNPF
目录 Intro 一、是什么? 提供自动化的解决方案 二、为什么受欢迎? JNPF自身特点——安全、方便、高效、低耗 对于企业,更“安全” 成本“最低”,效率“最高” 三、JNPF开发平台功能展示 技术介绍 参考地址 近几年,随着…...

Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!
中午时候,在技术交流群里聊起关于Redis创始人的一些趣事,比如离开Redis之后,去写科幻小说之类的。 因为好奇科幻小说,TJ君就去搜索了一下。结果一搜,发现Redis作者最近居然又搞了个新活儿! 世界上最小的聊…...

RK-3399pro 萤火虫firefly 官方unbuntu 固件系统安装搜狗中文输入法
RK-3399pro 萤火虫firefly 官方unbuntu 固件系统安装搜狗输入法(适用于所有基于Ubuntu的UI桌面系统) 一、添加中文语言支持输入法平台fcitx 1.安装fcitx sudo apt-get install fcitx 2.然后设置fcitx为开机自启动 sudo cp /usr/share/applications/fc…...