OpenCV图像平滑处理方法详解

引言
在数字图像处理中,图像平滑是一项基础而重要的预处理技术。它主要用于消除图像中的噪声、减少细节层次,为后续的图像分析(如边缘检测、目标识别等)创造更好的条件。OpenCV作为最流行的计算机视觉库之一,提供了多种图像平滑方法。本文将详细介绍这些方法及其应用场景。

一、什么是图像平滑?
图像平滑(Image Smoothing)是指通过特定的算法对图像进行模糊处理,从而达到降噪、去除细节或预处理的目的。这种处理虽然会使图像变得"模糊",但在许多计算机视觉任务中却能带来更好的处理效果。

二、常见的图像平滑方法
1.先对图片加上噪声点

import cv2
import numpy as np
def add_peppersalt_noise(image,n=1000):result = image.copy()h,w = image.shape[:2]   #获取图片的高和宽for i in range(n):   #生成n个椒盐噪声x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:result[x,y] = 0else:result[x,y] = 255return resultimage = cv2.imread('zhaoyun.jpg')
cv2.imshow('yuantu',image)
cv2.waitKey(0)noise = add_peppersalt_noise(image)
cv2.imshow('noise',noise)
cv2.waitKey(0)

2. 均值滤波(Averaging)

 dst=cv2.blur(src,ksize,anchor,borderType)dst是返回值src是需要处理的图像ksize是滤波核(卷积核)的大小anchor是锚点,默认值是(-1,-1)一般无需更改borderType是边界样式,一般无需更改一般情况下,使用dst=cv2.blur(src,ksize)即可

均值滤波是最简单的线性滤波方法,它用像素点邻域的平均值来代替该像素点的值。

blur_1 = cv2.blur(noise,(3,3))   #卷积核为3,3   效果一般,清晰度一般
cv2.imshow('blur_1',blur_1)
cv2.waitKey(0)blur_2 = cv2.blur(noise,(5,5))   #卷积核为5,5   效果稍好但模糊
cv2.imshow('blur_2',blur_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

特点

  • 算法简单,计算速度快
  • 对高斯噪声有较好的效果
  • 会导致图像边缘模糊

3. 方框滤波(boxFilter)

 dst=cv2.boxFilter(src,deepth,ksize,anchor,normalize,borderType)式中:dst是返回值,表示及进行方框滤波后得到的处理结果。src是需要处理的图像,即原始图像deepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。(可以理解为数据类型)ksize是滤波核(卷积核)的大小anchor是锚点(指对应哪个区域),默认值是(-1,-1)一般无需更改normalize 表示在滤波时是否进行归一化。1.当为True时,归一化,用邻域像素值的和除以面级。 此时方框滤波与均值滤波效果相同。2.当为False时,不归一化,直接使用邻域像素值的和。和>255时使用255。

方框滤波在平滑图像的同时能很好地保留边缘信息,结合了空间邻近度和像素值相似度。

boxFilter_1 = cv2.boxFilter(noise,-1,(3,3),normalize=True)
cv2.imshow('boxFilter_1',boxFilter_1)
cv2.waitKey(0)
boxFilter_2 = cv2.boxFilter(noise,-1,(3,3),normalize=False)
cv2.imshow('boxFilter_2',boxFilter_2)
cv2.waitKey(0)

4. 中值滤波(Median Blur)

中值滤波用邻域的中值代替中心像素的值,是一种非线性滤波方法。

medianB = cv2.medianBlur(noise,3)
cv2.imshow('medianBlur',medianB)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 高斯滤波(Gaussian Blur)

dst=cv2.GaussianBlur(src,ksize[,sigmaX[,sigmaY[,dst]]]) 高斯滤波
# 参数说明:
# src:输入图像,通常是一个NumPy数组
# ksize:滤波器的大小,它是一个元组,表示在水平和垂直方向上的像素数量。例如(5,5)表示一个5×5的滤波器。
# sigmaX和sigmaY:分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下,他们都等于0,这意味着没有高斯模糊。
# dst:输出图像,通常是一个NumPy数组。如果位None,则会创建一个新的数组来存储结果。

高斯滤波是一种加权平均滤波,离中心点越近的像素权重越大,符合高斯分布。

GaussianB = cv2.GaussianBlur(noise,(3,3),1)  
cv2.imshow('GaussianBlur',GaussianB)
cv2.waitKey(0)

特点:
对高斯噪声有很好的去除效果
比均值滤波更能保留边缘信息
是许多计算机视觉任务的首选平滑方法
三、方法比较与选择指南
方法    优点    缺点    适用场景
均值滤波    简单快速    边缘模糊严重    快速预处理,不关心边缘
高斯滤波    平滑效果好,计算较快    对椒盐噪声效果一般    通用平滑处理,特别是高斯噪声
中值滤波    对椒盐噪声效果好    计算量较大    去除椒盐噪声
方框滤波    边缘保持好    计算复杂度高    需要保留边缘的去噪
四、总结
图像平滑是计算机视觉预处理的重要步骤。OpenCV提供了多种平滑方法,各有特点和适用场景。在实际应用中,应根据噪声类型、边缘保持需求和计算资源等因素选择合适的方法。理解这些方法的原理和特点,能够帮助我们在实际项目中做出更合理的选择。

希望本文能帮助您更好地理解和应用OpenCV中的图像平滑技术。在实践中多尝试不同的方法和参数,观察它们的效果差异,这将有助于您掌握这些技术的精髓。

六、2D卷积
​ OpenCV提供了多种滤波方式,来是实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等。大多数滤波方式所使用的卷积核都具有一定的灵活性,能够方便地设置卷积核的大小和数量。但是,我们有时候希望使用特定的卷积核来实现卷积操作,例如使用如下卷积核来进行卷积操作。

前面介绍过的滤波函数都无法将卷积核确定为上述形式,这时要使用OpenCV的自定义卷积函数。

​ 在OpenCV中,允许用户自定义卷积核实现卷积操作,使用自定义卷积核实现卷积操作的函数是cv2.filer2D(),其语法格式为:

dst = cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)

dst:返回值,均值滤波处理后得到的处理结果。

src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

ddepth:结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。

kenel:卷积核,是一个单通道的数组。如果想在处理彩色图像时,让每个通道使用不同的核,则必须将彩色图像分解后使用不同的核进行操作。

anchor:锚点,其默认值是(-1,-1), 表示当前计算均值的点位于核的中心点位置,改制使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

delta:修正值。可选项,如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果。

borderType:边界样式,该值决定了以何种方式来处理边界。一般情况下,不需要考虑该值,直接采用默认值。

通常情况下,使用滤波函数cv2.filter2D()时,对于参数anchor、delta、borderType直接采用默认值即可。

示例: 自定义一个卷积核,通过函数cv2.filter2D()应用该卷积核对图像进行滤波操作,并显示滤波结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:
http://www.pswp.cn/bicheng/93646.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天两道算法题:DAY1

题目一:金币 题目一:金币 1.题目来源: NOIP2015 普及组 T1,难度红色,入门签到题。 2.题目描述: 3.题目解析: 问题转化:求下面的一个数组的前 k 项和。 4.算法原理: …

C++核心语言元素与构建块全解析:从语法规范到高效设计

📌 为什么需要双维度学习C?核心语言元素 → 掌握标准语法规则(避免未定义行为Undefined behavior)构建块(Building Blocks) → 像搭积木一样组合功能(提升工程能力) 例如&#xff1a…

RK3588开发板Ubuntu系统烧录

Ubuntu22.04——YOLOv8模型训练到RK3588设备部署和推理 文章中给出了通过ARM设备上面的NPU进行深度学习的模型推理过程,在此之前,我们在收到一块全新的rk3588开发板后,需要对其进行系统的烧录,这里以Ubuntu22.04系统为例。 目录 1.获取待烧录系统的镜像 2.烧录工具准备 2.1…

AI评测的科学之道:当Benchmark遇上统计学

AI评测的科学之道:当Benchmark遇上统计学 —— 如何客观评估大模型能力,避免落入数据陷阱 在人工智能尤其是大语言模型(LLU)爆发式发展的今天,各类模型榜单(如Open LLM Leaderboard、LMSys Arena&#xff0…

CSS 基础入门教程:从零开始学习样式表

一、CSS 简介CSS(Cascading Style Sheets,层叠样式表)是一种用于描述 HTML 或 XML 等文档呈现方式的语言。它是现代网页设计的三大核心技术之一,与HTML(结构层)和JavaScript(行为层)…

图解简单选择排序C语言实现

1 简单选择排序 简单选择排序(Simple Selection Sort)是一种基础且直观的排序算法,其核心思想是通过重复选择未排序部分中的最小(或最大)元素,并将其放到已排序部分的末尾,逐步完成整个序列的排…

FPS游戏时,你的电脑都在干什么(CS2)

人物介绍:CPU > 你忠实的处理器 i5-13600KFGPU > 你花大价钱买的显卡 RTX3060(不是自己的配置,自己的是XEON E5GTX1060,测不出来,上面是社区一个好心大哥的数据,较为精准)&#…

MySQL完整重置密码流程(针对 macOS)

MySQL完整重置密码流程(针对 macOS) 1. 强制停止 MySQL 服务 sudo /usr/local/mysql/support-files/mysql.server stop sudo killall mysqld mysqld_safe # 确保所有进程停止2. 以安全模式启动(跳过权限验证) sudo /usr/local/my…

Python数据类型转换详解:从基础到实践

在Python编程中,数据类型转换是一项基础且频繁使用的操作。无论是处理用户输入、进行数值计算还是数据处理,都离不开类型转换。本文将系统介绍Python中的数据类型体系,详解类型转换的规则与实践技巧,帮助你在实际开发中灵活运用。…

智能制造——解读车企数字化转型构建高效经营管理数据治理体系【附全文阅读】

适应人群为车企数字化转型决策者、数据管理负责人、IT 部门从业者、财务及业务部门管理者。主要内容围绕车企数字化转型中经营管理数据治理体系构建展开,核心包括诊断背景(以经营管理数字化为切入点,聚焦财务业务在线化、零点月结等痛点,应对系统与数据问题);现状诊断(从…

STM32的UART奇偶校验注意

关键点:设置为9位数据位, STM32的UART奇偶校验注意_stm32串口奇校验初始化程序-CSDN博客https://blog.csdn.net/JacobFang/article/details/118993643 特此记录 anlog 2025年8月13日

Origin绘制正态分布直方图+累积概率图|科研论文图表教程(附数据格式模板)

免费查看完整教程(包括数据格式) ↑ ↑ ↑ 目录 本 期 导 读 No.1 理解图形 1 定义 2 图形特点 3 应用场景 No.2 画图教程 1 导入数据,绘制图形 2 设置绘图细节 本 期 导 读 直方图,以柱状高低直观展现各区间数据的分布密度,集中趋势、离散程度与异常…

Python入门第6课:文件操作之读写文本、CSV与JSON文件

Python入门第6课:文件操作之读写文本、CSV与JSON文件 作者: 蛋皮 标签: Python, 文件操作, 读写文件, 文本文件, CSV, JSON 在掌握了Python的基础语法、数据结构和函数之后,你的程序已经能够处理内存中的数据。但现实世界的数据通常存储在文件中。无论是用户的配置信息、日…

基于Uni-app+vue3实现微信小程序地图固定中心点范围内拖拽选择位置功能(分步骤详解)

一、功能概述与实现步骤1.1 功能需求显示地图并固定中心点标记绘制服务区域多边形边界实时检测拖拽后位置是否在服务区内提供位置确认和超出范围提示功能1.2 实现步骤分解第一步:初始化地图基础配置创建Map组件并设置基本属性定义服务区域多边形坐标设置地图初始中心…

《设计模式》抽象工厂模式

1.抽象工厂模式定义 抽象工厂模式(Abstact Factory ): 提供一个创建一系列相关或者相互依赖对象的接口,而无须指定它们具体的类。 1.1 UML图:2.抽象工厂模式举例: 业务场景:需要实现一个数据访问…

git stash临时保存工作区

通过git stash 可以灵活管理临时修改,保持工作区整洁,是多人协作或多任务切换时的常用工具,主要用于临时保存工作区和暂存区修改的命令,常用于以下场景:(1)需要切换分支,但不想立即提…

Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案

📋 概述 Vue 3.5 引入了 Teleport 的 defer 属性,这是一个重要的延迟解析特性。传统的 Teleport 在组件挂载时会立即解析目标容器,而 defer 属性允许推迟 Teleport 的目标解析,直到应用的其他部分挂载完成。 ⚠️ 传统 Teleport …

【102页PPT】某著名企业智能制造解决方案及智能工厂产品介绍(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91662620 资料解读:某著名企业智能制造解决方案及智能工厂产品介绍 详细资料请看本解读文章的最后内容 智能制造背景与整体规划…

Revisiting Character-level Adversarial Attacks for Language Models

文章目录**核心设计目标****关键步骤与实现细节**1. **候选位置选择(Algorithm 1: get_top_locations)**2. **扰动生成与筛选(Algorithm 2: Charmer)**3. **适配大语言模型(LLM)的攻击****实验中的性能表现…

(一)Python + 地球信息科学与技术 (GeoICT)=?

目录 引子 一、核心定位:Python 为何能重塑 GeoICT? 二、Python 在 GeoICT 中的关键应用领域 1. 空间数据处理(GIS 基础) 2. 遥感图像处理与解译 3. 空间分析与建模 4. 地学数据可视化 5. 时空大数据分析 三、Python GeoI…