news 2026/10/29 0:41:30

OpenCV 学习8-使用卷积进行图像滤波

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCV 学习8-使用卷积进行图像滤波

1、相关概念

总结AI的回答

1.1 实际需求

在现实世界,获取的图像往往受到各种因素干扰:

  • 光线不足
  • 相机抖动
  • 传感器精度不足
  • 数据压缩带来失真
  • 环境复杂影响成像清晰度

典型应用场景

应用场景需求
医学影像提高CT/MRI图像质量,帮助医生看清病灶
自动驾驶检测车道线、行人边缘
手机拍照自动美颜、夜景模式去噪
安防监控清晰识别车牌、人脸
工业质检发现产品表面裂纹、缺陷

需要通过“滤波”这个工具修复缺陷、突出重点、提取特征。

1.2 什么是图像滤波

图像滤波(Image Filtering)是数字图像处理中的一项技术,通过对图像像素及其邻域像素进行数学运算,起到图像去噪、边缘检测、增强、平滑的作用。

处理过程:用一个“滤波器”在图像上滑动,计算每个位置的新像素值。

- 滤波器/卷积核:一个小的矩阵

1.3 什么是“噪声”

在图像处理中,“噪声”是指图像中错误的像素值。这些错误的像素值并非原始场景的一部分,而是在图像捕获、传输或处理过程中产生,它导致像素的亮度、颜色信息发生了非预期的改变。

不同噪声需要不同算法

噪声类型

  1. 高斯噪声
  • 最常见的一种
  • 每个像素的噪声值服从正态分布(高斯分布)
  • 表现为图像中“雪花”,整体均匀的、细密的颗粒感
  1. 椒盐噪声
  • 图像中随机出现的纯黑(0)或纯白(255)像素点
  • 表现为像撒了胡椒和盐
  1. 泊松噪声
  • 常见于低光成像

2、卷积核简介

在图像处理中,卷积核是一个二维矩阵,用于对图像进行滤波。它也被称为卷积矩阵,通常是一个正方形的 M×N 矩阵,其中 M 和 N 都是奇数(例如 3×3、5×5、7×7 等)。

卷积核可用于对图像中的每个像素进行数学运算,比如模糊或锐化图像。

2.1 使用核来锐化或模糊图像

假设有一个 3×3 的二维卷积核

kernel=np.array([[1,1,1],[1,1,1],[1,1,1]])

对图像进行滤波是通过将核与图像进行卷积来实现的,步骤如下:

  1. 假设核的中心位于图像中的某个特定像素(p)处。
  2. 将核中的每个元素的值与源图像中对应像素元素(即其像素强度)相乘
  3. 将这些乘法运算的结果相加,并计算出平均值
  4. 最后,将像素点(p)的值替换为您刚刚计算出的平均值

通过改变核元素的值就能实现模糊或锐化效果。

2.2 identity kernel(恒等卷积核)

恒等核是一个方形矩阵,其中中间的元素为 1,而其他所有元素均为 0。

# 典型恒等核 3×3 的矩阵kernel=np.array([[0,0,0],[0,1,0],[0,0,0]])

当该核与图像进行卷积时,卷积后图像不变:

  • 只有中心像素参与计算;
  • 权重为 1,其他邻域像素权重为 0;
  • 因此每个位置的输出就是原像素值本身。

主要用途

  • 调试卷积系统:验证 filter2D 是否正常工作:若输入=输出,则流程无误。
  • 作为基准模型:在设计新滤波器前,先用恒等核确认图像处理流程正确。
  • 组合滤波的基础

2.3 二维卷积核模糊图像

什么样的二维卷积核可以模糊图像?

模糊核的本质是“用邻域像素的加权平均代替当前像素”,从而抹平局部差异,达到模糊效果。
能够模糊图像的卷积核具有以下共同特征:

特征说明
所有元素为非负数权重不能为负,否则可能增强边缘而非模糊
元素之和为 1保证整体亮度不变(避免变亮或变暗)
尺寸通常为奇数方阵3×3、5×5、7×7,便于定位中心

常见的模糊卷积核类型

均值滤波核

最简单的模糊核,所有元素相等。

kernel=np.array([[1,1,1],[1,1,1],[1,1,1]])/9# 总和为 1
  • 效果:均匀地对每个像素取平均
  • 缺点:可能导致边缘“块状”失真(因为所有邻居权重相同)
  • 函数:cv2.blur(img, (3,3))
高斯滤波核

基于二维高斯分布设计,中心权重最大,向四周呈钟形衰减。

kernel=np.array([[1,2,1],[2,4,2],[1,2,1]])/16
  • 效果:自然平滑,保留更多结构信息
  • 优点:能有效去除高斯噪声,且边缘过渡更柔和
  • 函数:cv2.GaussianBlur(img, (3,3), 0)
自定义模糊核

可以自定义模糊核,只要满足条件即可。

# 强调中心的模糊核kernel=np.array([[0.05,0.1,0.05],[0.1,0.4,0.1],[0.05,0.1,0.05]])# 总和 ≈ 1.0
  • 函数:cv2.filter2D(image, -1, kernel)
模糊原理(局部加权平均)

假设有一个图像区域如下(灰度值):

[100,110,105][108,255,102]← 中心是极端值(可能是噪声)[103,107,106]

使用均值核处理后:

  • 新中心值 = 邻域平均 ≈ 120
  • 原来的“255”被“拉回”到正常范围
  • 突兀的像素被周围同化 → 视觉上变模糊了

3、相关函数

3.1 cv2.filter2D()函数

filter2D是实现自定义滤波器的核心工具,广泛应用于图像增强、边缘检测、模糊、锐化等任务。

filter2D 的核心是卷积(Convolution):

  1. 将 kernel 在图像上从左到右、从上到下滑动
  2. 在每个位置,将 kernel 的每个元素与对应区域的像素值相乘
  3. 所有乘积累加,得到一个新的像素值

函数定义

dst = cv2.filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=0, borderType=cv2.BORDER_DEFAULT)
  • 参数说明
参数类型说明
srcNumPy数组图像
ddepthint输出图像的深度,通常设置为 -1,表示与输入相同
kernelNumPy数组(核/掩模)卷积核(滤波器),大小为奇数方阵(如 3×3, 5×5),类型为浮点型
dst可选输出输出图像,通常不传
anchor元组 (x,y)卷积核的锚点,默认为 (-1, -1),表示中心点。
deltafloat可选偏移值,在卷积后加到结果上(可用于亮度调节)
borderTypeint边界填充方式

3.2 其它函数

建议用测试代码查看效果。

方法函数特点
均值模糊cv2.blur()所有像素权重相等,容易导致边缘模糊
高斯模糊cv2.GaussianBlur()中心权重高,边缘保留较好,最常用
中值模糊cv2.medianBlur()对椒盐噪声效果好,非线性滤波
双边滤波cv2.bilateralFilter()保边去噪,但较慢
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 9:05:18

如何评估LobeChat的加载速度与响应延迟?性能基准测试

如何评估LobeChat的加载速度与响应延迟?性能基准测试 在今天这个“快即是王道”的AI时代,用户早已习惯了秒级甚至毫秒级的交互反馈。当我们在网页上向一个聊天机器人提问时,哪怕只是多等了半秒钟才看到第一个字蹦出来,那种微妙的“…

作者头像 李华
网站建设 2026/10/28 16:32:46

缓存与数据库一致性解决方案深度解析

一、业务场景与挑战1.1 12306余票查询场景在12306系统中,用户需要实时查询列车不同站点、不同座位类型的余票信息。为提升查询性能,我们将余票信息缓存在Redis中。但在用户下单支付时,需要同时更新数据库和缓存中的余票数据。核心挑战&#x…

作者头像 李华
网站建设 2026/10/29 18:01:57

消息队列真仙:我的道念支持最终一致性

瑶池圣地,飞升台。九天罡风如刀,撕扯着白玉砌成的古老平台。万丈雷云在头顶凝聚,电蛇狂舞,酝酿着最后一重、也是最凶险的“九霄寂灭神雷”。台下,瑶池众仙娥、各方观礼道友,皆屏息凝神,目光聚焦…

作者头像 李华
网站建设 2026/10/28 21:53:00

Spring Boot项目推送Gitee全流程(进阶)

对于国内的Java开发者而言,将Spring Boot项目托管到Gitee是一个常见且高效的选择。本文将以IntelliJ IDEA为开发环境,手把手带你完成从项目初始化到代码成功推送的全过程,并澄清关键概念、解释核心命令,助你彻底掌握。 一、核心概…

作者头像 李华
网站建设 2026/10/29 3:23:40

Java毕设项目:基于Springboot大学校园自习室教室座位预约网站设计与实现基于springboot高校自习室预约系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/10/28 15:25:35

JAVA打造同城羽馆预约,一键畅享运动

利用 JAVA 开发同城羽毛球馆预约系统,可以结合 高并发处理、实时交互、多端适配 等特性,打造一个 “一键预约、智能匹配、全流程数字化” 的运动服务平台,让用户轻松畅享羽毛球运动的乐趣。以下是具体实现方案与核心功能设计:一、…

作者头像 李华