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 算法介绍改进网络代码汇总第…...
跟我学c++中级篇——动态库的资源处理
一、动态库的资源管理 动态库在编程中几乎是一个无法绕过的问题,不管是在哪个平台上都一样。在前面的文章中分析知道,编程的一个核心目标就是对计算机的资源进行管理和控制。动态库编程做为一个重要的技术,同样要面对资源的管理这个重要问题…...

龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道
端午节承载着中华民族数千年的精神密码,龙舟最初是古人沟通天地、祈求风调雨顺的仪式载体。战国时期,屈原投江的悲壮故事为端午注入了家国情怀,龙舟竞渡从此兼具纪念英雄与祈福避疫的双重意义。这种文化内核,与深圳市华芯邦“以科…...

飞牛fnNAS的Docker应用之迅雷篇
目录 一、“迅雷”应用安装 二、启动迅雷 三、迅雷账号登录 四、修改“迅雷”下载保存路径 1、下载路径准备 2、停止“迅雷”Docker容器 3、修改存储位置 4、重新启动Docker容器 5、再次“启用”迅雷 五、测试 1、在PC上添加下载任务 2、手机上管理 3、手机添加下…...
Oracle 12c新增的数字转换验证VALIDATE_CONVERSION函数
Oracle 12c新增的数字转换验证函数 一、VALIDATE_CONVERSION函数(12c R2新增) Oracle 12c Release 2引入了原生验证函数,可直接判断字符串能否转换为指定类型: SELECT VALIDATE_CONVERSION(123.45 AS NUMBER) FROM dual; -- 返…...
c++设计模式-单例模式
C++ 设计模式 - 单例模式详解 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在软件开发中非常常见,适用于需要全局唯一实例的场景,如配置管理器、日志记录器、数据库连接池等。 单例模式的基本实现 在 C++ 中,…...

CppCon 2014 学习:Making C++ Code Beautiful
你说的完全正确,也很好地总结了 C 这门语言在社区中的两种典型看法: C 的优点(Praise) 优点含义Powerful允许底层控制、系统编程、高性能计算、模板元编程、并发等多种用途Fast无运行时开销,接近汇编级别性能&#x…...

【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?
一、数据存储架构设计核心原则 (一)分层存储架构:让数据各得其所 根据数据访问频率和价值,将数据划分为热、温、冷三层,匹配不同存储介质,实现性能与成本的平衡。 热数据层:访问频率>100次/秒。采用Redis集群存储高频访问数据(如用户登录态、实时交易数据),配合…...
基于AOD-Net与GAN的深度学习去雾算法开发
基于AOD-Net与GAN的深度学习去雾算法开发 1. 引言 1.1 图像去雾研究意义 大气散射现象导致的图像质量退化对计算机视觉应用产生严重影响… 2. 理论基础 2.1 大气散射物理模型 经典模型描述为: I ( x ) = J ( x ) t ( x...
【C++篇】list模拟实现
实现接口: list的无参构造、n个val构造、拷贝构造 operator重载 实现迭代器 push_back() push_front() erase() insert() 头尾删 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace liu {//定义list节点temp…...
(四) 本地YARN集群的部署
一、部署说明 Hadoop YARN分布式资源调度,会启动: ResourceManager进程作为管理节点NodeManager进程作为工作节点ProxyServer、JobHistoryServer这两个辅助节点 二、配置文件 在 $HADOOP_HOME/etc/hadoop 文件夹内,修改: 1.m…...