当前位置: 首页 > news >正文

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不禁用&#xff0…...

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等协议无处不在&#xff0c…...

淘宝商品详情数据接口(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 算法介绍改进网络代码汇总第…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...