003 OpenCV filter2D
目录
一、环境
二、图像卷积
三、代码演示
3.1、锐化
3.2、sobel边缘,x方向
3.3、sobel边缘,y方向
3.4、高斯模糊
3.5、完整代码
一、环境
本文使用环境为:
- Windows10
- Python 3.9.17
- opencv-python 4.8.0.74
二、图像卷积
在OpenCV中,filter2D函数是用于在图像空间域进行卷积操作的函数。然而,你也可以通过fft2和ifft2函数在频率域进行滤波。下面我将对这两种方法进行简单的比较。
空间域卷积:
空间域卷积是一种直接在图像上应用滤波器的方法。filter2D函数会接受一个输入图像和一个滤波器,然后在输入图像上应用滤波器。滤波器是一个二维数组,通常是一个核对图像进行卷积。例如,你可以使用一个边缘检测滤波器来检测图像中的边缘。
优点:
- 直观:空间域卷积直观易懂,易于实现和理解。
- 计算效率高:由于滤波器直接应用于图像像素,因此这种方法的计算效率相对较高。
缺点:
- 边缘效应:空间域卷积可能会在图像边缘产生不期望的效应,例如边缘像素的变形。
- 无法处理大滤波器:由于卷积核需要覆盖整个图像,因此对于大的滤波器,空间域卷积可能会变得非常慢。
频域滤波:
频域滤波是在频率域上应用滤波器的方法。首先,使用fft2函数将输入图像转换到频率域,然后应用滤波器,最后使用ifft2将结果转换回空间域。在频率域上,滤波器可以是一个一维数组,大大降低了处理时间和内存需求。
优点:
- 处理大滤波器:由于在频率域上进行滤波,所以可以处理任意大小的滤波器,而不会增加卷积核的大小。
- 边缘效应减少:由于在频率域上进行操作,所以可以减少在空间域卷积中出现的边缘效应。
缺点:
- 计算复杂度增加:频域滤波需要额外的步骤来转换图像到频率域和回空间域,这会增加计算的复杂度。
- 对噪声敏感:频率域滤波可能会放大图像中的噪声,特别是在高频部分。
- 需要更多的内存:频域滤波需要额外的内存来存储频率域的图像和滤波器。
总的来说,空间域卷积和频域滤波各有其优点和缺点。选择哪种方法取决于你的具体需求和问题。例如,如果你需要处理非常大的滤波器或者需要减少边缘效应,那么频域滤波可能是一个更好的选择。如果你需要快速简单的方法或者处理小滤波器,那么空间域卷积可能更适合你。
三、代码演示
卷积在图像中原理很简单,如下图,图像I1被卷积核K提取特征,最终得到I2,但是要注意,I1维度是5x5的,计算的时候,需要将其四周边界进行拓展(padding),形成7X7的矩阵(拓展区域填充0),然后卷积,最后才能得到5X5的I2。
3.1、锐化
# 卷积核:锐化kernel_shape = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]], np.float32) # kernel should be floating point type
下面左边是原图,右边是效果图,效果图明显比原图更加清晰。

3.2、sobel边缘,x方向
# 卷积核:sobel边缘,X方向kernel_sebelx = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]], np.float32)
3.3、sobel边缘,y方向
# 卷积核:sobel边缘,y方向kernel_sebely = np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -1]], np.float32)
3.4、高斯模糊
# 卷积核:高斯模糊,元素和为1kernel_gaussian = np.array([[0.1, 0.1, 0.1],[0.1, 0.2, 0.1],[0.1, 0.1, 0.1]], np.float32)
3.5、完整代码
from __future__ import print_function
import sys
import time
import numpy as np
import cv2 as cvdef main(argv):src = cv.imread('7.jpg', 1)cv.namedWindow("Input", cv.WINDOW_AUTOSIZE)cv.namedWindow("Output", cv.WINDOW_AUTOSIZE)cv.imshow("Input", src)# 卷积核:锐化kernel_shape = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]], np.float32) # kernel should be floating point type# 卷积核:sobel边缘,X方向kernel_sebelx = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]], np.float32) # 卷积核:sobel边缘,y方向kernel_sebely = np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -1]], np.float32) # 卷积核:高斯模糊,元素和为1kernel_gaussian = np.array([[0.1, 0.1, 0.1],[0.1, 0.2, 0.1],[0.1, 0.1, 0.1]], np.float32) #dst1 = cv.filter2D(src, -1, kernel_shape)#dst1 = cv.filter2D(src, -1, kernel_sebelx)#dst1 = cv.filter2D(src, -1, kernel_sebely)dst1 = cv.filter2D(src, -1, kernel_gaussian)cv.imshow("Output", dst1)cv.waitKey(0)cv.destroyAllWindows()return 0if __name__ == "__main__":main(sys.argv[1:])
相关文章:
003 OpenCV filter2D
目录 一、环境 二、图像卷积 三、代码演示 3.1、锐化 3.2、sobel边缘,x方向 3.3、sobel边缘,y方向 3.4、高斯模糊 3.5、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、图像卷积 在OpenCV…...
轻松玩转华为MateX5分屏功能,乐趣层出不穷!
✅小窗交互,沉浸体验不打断; ✅分区截屏,花式截图,一招搞定; ✅跨屏拖拽,随心分享易如反掌; ✅悬停视频会议,沟通效率大不同。...
springboot引入redisson分布式锁及原理
1.引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>2.配置类创建bean /*** author qujingye* Classname RedissonConfig* Description TOD…...
Linux驱动开发 问题随笔
1、内核空间与用户空间数据交换方式 分两种情况: 1> 需要交换的数据量较大时; 2> 需要交换的数据量较小时; 第一种情况使用以下的函数: unsigned long copy_to_user(void __user* to, const void* from, unsigned long n)…...
三分/01分数规划
三分 最小球覆盖 2018南京D 三分套三分套三分 constexpr int N105; struct node{int x,y,z; }a[N]; int n; double road(double x1,double y1,double z1,double x2,double y2,double z2){return sqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2)(z1-z2)*(z1-z2)); } double check(double…...
大批卖家产品被下架!Temu又有新动作?
大批卖家产品被下架!Temu又有新动作? 近日,Temu正式上线韩国站,截止目前已上线27个国家地区。Temu海外市场发展迅猛,外界的声音也褒贬不一。这其中最有发言权的,应该就是Temu平台的卖家了! …...
STM32 LL库 TIM3定时器多通道捕获输入采集
为什么不用HAL库,使用HAL库捕获输入一个通道还尚可,多通道捕获由于HAL的回调函数不符合我的要求,干脆直接切换到LL库。网上找了许多,代码处理写的不符合我的要求,这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…...
如何为初创企业选择合适的 ERP 系统?
**ERP系统**是制造、分销、供应链、金融、会计、风险管理等多个行业必不可少的企业技术解决方案。不论垂直行业、企业规模或目标受众如何,将ERP作为企业管理战略的核心部分都非常重要。 对于渴望发展的小型企业和初创企业来说,更是如此。大型企业需要对…...
jssip contact的随机字符串的问题
let configuration {sockets: [socket],uri: sip:1001127.0.0.1,}; 如果这样注册freesswitch,那么fs注册信息中的Contact字段信息就是:sip:sdfsdfsdfsfcvdwvdwd.invalid;transportws;fs_natyes;fs_path... 正确的写法是: //URI是jssip内置…...
别再吐槽大学教材了,来看看这些网友强推的数学神作!
前言 关于大学数学教材的吐槽似乎从来没停止过。有人慨叹:数学教材晦涩难懂。错!难懂,起码还可以读懂。数学教材你根本读不懂;也有人说:数学教材简直就是天书。 数学教材有好有坏,这话不假,但更…...
Elasticsearch-汇总
Elasticsearch-基础介绍 跳转 分布式全文搜索引擎:包含【实时搜索】和【分析引擎】 Elasticsearch-倒排索引 跳转 倒排索引 跳转 Elasticsearch-Term Dictionary和Term Index 跳转 lucene-基础介绍 跳转 Elasticsearch-联合索引 跳转 Elasticsearch-Roaring B…...
9.3 【MySQL】系统表空间
了解完了独立表空间的基本结构,系统表空间的结构也就好理解多了,系统表空间的结构和独立表空间基本类似,只不过由于整个MySQL进程只有一个系统表空间,在系统表空间中会额外记录一些有关整个系统信息的页面,所以会比独立…...
STM32CUBEIDE生成hex文件 Release版本的下载不启动
现象描述: 使用STM32CUBEIDE生成hex文件,使用脱机下载器或者J-Flash下载到单片机中(STM32F407)单片机不启动。 测试其他的程序是可以启动的。 修改办法: 把Release版本切换到debug版本,重新编写…...
2023年亚太杯数学建模思路 - 复盘:校园消费行为分析
文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...
ceph集群移除物理节点
1. 概述 ceph分布式存储在生产或者实验环境,经常涉及到物理节点加入或者删除,本文仅对移除物理节点的相关步骤做了操作记录,以方便需要时查阅。 2. 移除物理节点 2.1 out掉相应osd 操作之前通过ceph -s确保整个集群状态是OK的,…...
(八)Spring源码解析:Spring MVC
一、Servlet及上下文的初始化 1.1> DispatcherServlet的初始化 对于Spring MVC来说,最核心的一个类就是DispatcherServlet,它负责请求的行为流转。那么在Servlet的初始化阶段,会调用init()方法进行初始化操作,在DispatcherSe…...
maven或者gradle打完jar,jekins启动提示找不到问题
1、记录下遇到的一个问题,maven或者gradle打完jar,然后jekins发布,启动提示找不到实体类,mapper,xml问题 2、首先排查jar包中这些文件是否存在 3、然后排查每层的包名或者文件名是否能对应上 我这次遇到的问题就是本地…...
浏览器缓存sessionStorage、localStorage、Cookie
一、sessionStorage 1、简介 sessionStorage用于在浏览器会话期间存储数据,数据仅在当前会话期间有效。 存储的数据在用户关闭浏览器标签页或窗口后会被清除。 2、方法 使用sessionStorage.setItem(key, value)方法将数据存储在sessionStorage中。使用sessionSt…...
易点易动固定资产管理系统场景应用一:集成ERP/财务系统
在企业的日常运营中,固定资产管理是一个重要而繁琐的任务。传统的手工管理方式往往效率低下且容易出错,给企业带来不必要的成本和风险。为了解决这一问题,易点易动固定资产管理系统应运而生。本文将重点介绍易点易动固定资产管理系统在集成ER…...
k8s部署elk8 直接通过logstash获取日志文件方式
配置文件 kibana [rootnode101 config]# cat kibana.yml # # ** THIS IS AN AUTO-GENERATED FILE ** ## Default Kibana configuration for docker target server.host: "0.0.0.0" server.shutdownTimeout: "5s" elasticsearch.hosts: [ "http:/…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...



