opencv(5): 滤波器
滤波的作用:一幅图像通过滤波器得到另一幅图像;其中滤波器又称为卷积核,滤波的过程称为卷积。
锐化:边缘变清晰

低通滤波(Low-pass Filtering):
目标:去除图像中的高频成分,保留低频成分。
效果:平滑图像、去除噪声。
应用:图像平滑、模糊、去噪等。
常见滤波器:均值滤波、高斯滤波等。
高通滤波(High-pass Filtering):
目标:去除图像中的低频成分,保留高频成分。
效果:突出图像的边缘、细节。
应用:图像锐化、边缘检测等。
常见滤波器:拉普拉斯滤波、Sobel 滤波等。
在频域中,图像的低频成分对应于图像中变化缓慢的区域,而高频成分对应于图像中变化较快的区域。因此,低通滤波器通过减小图像中相邻像素之间的差异来平滑图像,而高通滤波器则通过强调相邻像素之间的差异来突出图像的边缘和细节。
低通滤波
主要是用来去噪。
均值滤波 cv2.blur
均值滤波是一种基本的图像处理技术,它通过取周围像素的平均值来模糊图像,从而减少图像中的噪声。这种滤波方法对于平滑图像、去除噪声或模糊图像中的细节很有用。
高斯滤波 cv2.GaussianBlur
高斯滤波是一种常用的图像处理技术,它通过在图像上应用高斯函数来进行平滑处理,从而降低图像的噪声并模糊图像。
cv2.GaussianBlur 函数接受三个参数:待处理的图像、高斯核的大小和标准差。高斯核的大小决定了平滑的程度,标准差越大,模糊效果越明显。在这个例子中,使用了一个 (5, 5) 的高斯核,标准差为 0,表示使用默认的标准差。
# 定义高斯核的大小,例如 (5, 5),和标准差,例如 0
kernel_size = (5, 5)
sigma = 0# 进行高斯滤波
blurred_img = cv2.GaussianBlur(img, kernel_size, sigma)
中值滤波 cv2.medianBlur
中值滤波是一种非线性滤波方法,它的原理是用窗口内的中值来代替中心像素的值,这样可以有效地去除图像中的椒盐噪声等离群值。
cv2.medianBlur 函数接受两个参数:待处理的图像和中值滤波的卷积核大小。卷积核大小必须是奇数,通常选择 3x3 或 5x5。
# 定义中值滤波的卷积核大小,必须是奇数
kernel_size = 5
# 进行中值滤波
blurred_img = cv2.medianBlur(img, kernel_size)
双边滤波 (对美颜效果好)
双边滤波是一种用于平滑图像的滤波技术,与传统的高斯滤波不同,它在平滑的同时保留了图像的边缘信息。这是通过同时考虑像素的颜色相似性和空间相似性来实现的。
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
- src: 输入图像(单通道或多通道图像)。
- d: 表示滤波器的直径,也就是每个像素邻域的直径。整数类型的值,通常取正整数。
- sigmaColor: 颜色空间的标准差,控制颜色相似性的权重。较大的值表示更广泛的颜色相似性。通常取正实数。
- sigmaSpace: 坐标空间的标准差,控制像素空间的权重。较大的值表示更广泛的空间相似性。通常取正实数。
- dst (可选): 输出图像,与输入图像大小和类型相同。
- borderType (可选): 边界模式,默认为 cv2.BORDER_DEFAULT。
返回值:如果提供了 dst 参数,则返回 dst,否则返回新创建的输出图像。
# 设置参数
d = 15 # 邻域直径
sigma_color = 75 # 颜色空间的标准差
sigma_space = 75 # 坐标空间的标准差# 进行双边滤波
bilateral_filtered_img = cv2.bilateralFilter(img, d, sigma_color, sigma_space)
高通滤波
主要是为了检测边缘。
Sobel
Sobel 算子是图像处理中常用的边缘检测算子之一,用于寻找图像中灰度变化明显的地方,通常用于边缘检测和图像梯度计算。Sobel 算子对图像进行卷积操作,分别计算水平方向和垂直方向的梯度,然后通过这两个梯度的组合来找到图像中的边缘。
Sobel 算子的具体形式如下:
水平方向 Sobel 算子:

垂直方向 Sobel 算子:

算法步骤:
- 将图像与水平方向 Sobel 算子进行卷积,得到水平方向的梯度。
- 将图像与垂直方向 Sobel 算子进行卷积,得到垂直方向的梯度。
- 将水平和垂直梯度的幅值进行合并,得到边缘强度。
cv2.Sobel(src, ddepth, dx, dy, ksize[, dst[, scale[, delta[, borderType]]]])
参数说明:
- src: 输入图像,灰度图像(单通道)。
- ddepth: 输出图像的深度,通常使用 cv2.CV_64F。
- dx: x 方向的导数阶数。
- dy: y 方向的导数阶数。
- ksize: Sobel 算子的大小,可以为 1、3、5、7。
- dst (可选): 输出图像。
- scale (可选): 缩放导数的比例因子,默认为1。
- delta (可选): 添加到结果的值,默认为0。
- borderType (可选): 边界模式,默认为 cv2.BORDER_DEFAULT。
Sobel 算子的优点是简单易实现,对于一些基本的边缘检测任务效果较好。在 OpenCV 中,可以使用 cv2.Sobel 函数来应用 Sobel 算子。例如:
import cv2
import numpy as np# 读取图像
image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE)# 水平方向 Sobel 算子
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)# 垂直方向 Sobel 算子
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)# 计算梯度幅值
gradient_magnitude = np.sqrt(sobel_x**2 + sobel_y**2)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Sobel X', sobel_x)
cv2.imshow('Sobel Y', sobel_y)
cv2.imshow('Gradient Magnitude', gradient_magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()
拉普拉斯算子
拉普拉斯算子是一种用于图像处理的算子,用于检测图像中的边缘和细节。在离散形式下,拉普拉斯算子通常定义为一个二阶导数的模板。在二维图像处理中,常见的拉普拉斯算子有以下几种形式:

cv2.Laplacian(src, ddepth[, ksize[, scale[, delta[, borderType]]]])
相比于 sobel,不需要分别计算水平和垂直。缺点是对噪音比较敏感,所以一般先进行平滑去噪。
ddepth
常见的深度值包括:
cv2.CV_8U: 无符号8位整数(0-255)。
cv2.CV_16U: 无符号16位整数。
cv2.CV_16S: 有符号16位整数。
cv2.CV_32F: 单精度浮点数。
cv2.CV_64F: 双精度浮点数。
选择适当的深度取决于应用程序的需求。如果图像中的边缘强度较大且可能为负值,则使用浮点数类型(如 cv2.CV_64F)可能更合适。
Canny 边缘检测
Canny边缘检测是一种经典的边缘检测算法,具有很好的性能和鲁棒性。以下是Canny边缘检测的基本步骤:
- 灰度转换: 首先,将输入图像转换为灰度图像。这是因为Canny算法通常应用于灰度图像,而不是彩色图像。
- 高斯滤波: 对灰度图像进行高斯滤波,以平滑图像并减小噪声。这有助于确保在边缘检测过程中不受到噪声的干扰。
- 计算梯度: 使用Sobel等算子计算图像的梯度。这一步将得到图像中每个像素点的梯度幅值和方向。方向包括
- 非极大值抑制: 对梯度图进行非极大值抑制,以保留局部梯度最大的像素,而抑制其他非极大值的像素。
- 双阈值检测: 使用双阈值来标记图像中的强边缘和弱边缘。根据梯度幅值,像素被分类为强边缘、弱边缘或非边缘。一般来说,强边缘具有较大的梯度值,而弱边缘具有较小的梯度值。超过强阈值,一定是边缘,低于弱阈值,一定不是,中间的则看与已经确定的边缘的连接性。
- 边缘跟踪: 根据强边缘的连通性,将弱边缘中与强边缘相连的部分保留作为最终的边缘。

# 进行Canny边缘检测
edges = cv2.Canny(image, threshold1, threshold2, apertureSize=3, L2gradient=False)# 参数说明:
# - image: 输入的灰度图像
# - threshold1, threshold2: 用于进行边缘检测的双阈值,低阈值和高阈值之间的区域会被认为是边缘。
# - apertureSize: Sobel算子的孔径大小,默认为3。
# - L2gradient: 一个布尔值,如果为True,则使用更精确的L2范数进行梯度计算,否则使用L1范数。默认为False。相关文章:
opencv(5): 滤波器
滤波的作用:一幅图像通过滤波器得到另一幅图像;其中滤波器又称为卷积核,滤波的过程称为卷积。 锐化:边缘变清晰 低通滤波(Low-pass Filtering): 目标:去除图像中的高频成分&#…...
《微信小程序开发从入门到实战》学习二十二
3.3 开发创建投票页面 3.3.10 使用switch开关组件 用switch开关组件增加一个设置是否匿名投票的功能。 switch常用属性如下: checked 开还是关,默认false关 disabled 是否禁用,默认false不禁用࿰…...
LLM模型-讯飞星火与百度文心api调用
spark-wenxin 1-讯飞星火1_1-SparkApi.py1_2- Chat_spark.py1_3-调用api 2-百度文心2_1.code 3-两者之间比较与openai 1-讯飞星火 进入讯飞官网进行创建应用,获取相关密钥APPID,APISecret,APIKey,选择最新版本 首次调用讯飞官方a…...
AIGC ChatGPT 4 将数据接口文件使用Python进行入库Mysql
数据分析,数据处理的过程,往往将采集到的数据,或者从生产库过来的接口文件,我们都需要进行入库操作。 如下图数据: 将这样的数据接口文件,进行入库,插入到Mysql数据库中。 用Python代码来完成。 ChatGPT4来完成代码输入。 ChatGPT4完整内容如下: 这个任务可以使用`…...
Loguru:一个超酷的Python库
在项目中,了解代码运行情况至关重要,特别是遇到Bug需要排除问题的时候,而这正是日志记录发挥作用的地方。对于Python开发者来说,Loguru是一个简单但功能强大的日志记录库,它使得跟踪代码的行为变得轻松而高效。 什么是…...
cloud的概念
"Cloud"(云)通常指的是云计算(cloud computing)领域。云计算是一种通过网络(通常是互联网)提供计算资源和服务的模型。这些计算资源包括计算能力、存储空间、数据库、网络、分析能力等。云计算模…...
物联网赋能:WIFI HaLow在无线连接中的优势
在探讨无线网络连接时,我们不难发现,WIFI已经成为我们日常生活中不可或缺的一部分,承载了半数以上的互联网流量,并在家庭、学校、娱乐场所等各种场合广泛应用。然而,尽管WIFI4、WIFI5和WIFI6等协议无处不在,…...
淘宝商品详情数据接口(Taobao.item_get)
淘宝商品详情接口是一种程序化的接口,允许开发者根据商品ID或商品链接,获取淘宝平台上的商品详细信息。通过这个接口,开发者可以方便地获取商品的标题、价格、销量、描述等数据,进而提供给用户进行展示和购买。 使用淘宝商品详情…...
视频剪辑方法:一键批量调整色调的高效技巧
在视频剪辑的过程中,色调调整是一项非常重要的工作。它能够改变影片的氛围、情感和视觉效果,更好地沉浸在影片的情境中。然而,对于许多视频剪辑师来说,批量调整色调是一项非常繁琐的任务,需要耗费大量的时间和精力。色…...
NAS层协议栈学习笔记
NAS(Non-Access Stratum)是无线网络中非接入层及包括移动性管理(MM)和会话管理(SM)协议 ,在5G(NR)系统中连接管理(Connection Management)用于建立和释放UE与AMF之间的控制面(CP)信令连接。 5G中移动性管理是通过NAS信令在UE与核心网之间进行交互的,连接…...
前端食堂技术周刊第 105 期:TS 5.3 RC、Vite 5.0、W3C 新任 CEO、有害的 Pinia 模式、2024 更快的 Web
美味值:🌟🌟🌟🌟🌟 口味:金桂普洱 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…...
jenkins 使用原生 git clone 命令,指定ssh密钥文件
使用环境变量 GIT_SSH_COMMAND 从Git版本2.3.0可以使用环境变量GIT_SSH_COMMAND,如下所示: GIT_SSH_COMMAND"ssh -i ~/.ssh/id_rsa_example" git clone example请注意,-i有时可以被您的配置文件覆盖,在这种情况下&…...
cobol数据类型
数据类型 数据部(data division)是用来描述程序中使用的变量的。 data name 数据名称 数据名称必须在数据部中定义,才能在过程部中使用。必须有一个用户自定义的名称,不能使用关键字,为存储实际数据的存储单元提供引…...
Java Web——JS中的BOM
1. Web API概述 Web API 是指浏览器提供的一套接口,这些接口允许开发人员使用 JavaScript(JS)来操作浏览器功能和页面元素。通过 Web API,开发人员可以与浏览器进行交互,以实现更复杂的功能和效果。 1.1. 初识Web AP…...
三十分钟学会Hive
Hive的概念与运用 Hive 是一个构建在Hadoop 之上的数据分析工具(Hive 没有存储数据的能力,只有使用数据的能力),底层由 HDFS 来提供数据存储,可以将结构化的数据文件映射为一张数据库表,并且提供类似 SQL …...
云计算发展
云计算,作为当今信息技术领域的核心力量,正在快速推动着我们社会的数字化转型。从智能家居到无人驾驶,从虚拟现实到人工智能,云计算的应用无处不在,它不仅仅是一个技术概念,更是一种全新的生活方式。在这个…...
vulhub redis-4-unacc
环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址:https://github.com/vulhub/redis-rogue-getshell 下载完成后,先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…...
风火编程--playwright爬虫
playwright爬虫基本用法 等待加载 page.wait_for_load_state(‘networkidle’) text page.content() 点击 demo with sync_playwright() as pw:browser pw.chromium.launch(headlessTrue)context browser.new_context()page context.new_page()page.goto(url)page.wait…...
CSS的选择器(一篇文章齐全)
目录 Day26:CSS的选择器 1、CSS的引入方式 2、CSS的选择器 2.1 基本选择器编辑 2.2 组合选择器 2.3 属性选择器 2.4 伪类选择器 2.5 样式继承 2.6 选择器优先级 3、CSS的属性操作 3.1 文本属性 3.2 背景属性 3.3 边框属性 3.4 列表属性 3.5 dispal…...
手把手从零开始训练YOLOv8改进项目(官方ultralytics版本)教程
手把手从零开始训练 YOLOv8 改进项目 (Ultralytics版本) 教程,改进 YOLOv8 算法 本文以Windows服务器为例:从零开始使用Windows训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法介绍改进网络代码汇总第…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
