OpenCV 高斯模糊 cv2.GaussianBlur

OpenCV 高斯模糊 cv2.GaussianBlur

flyfish

cv2.GaussianBlur 是 OpenCV 库中用于对图像进行高斯模糊处理的函数。

高斯模糊的含义

高斯模糊是一种常见的图像滤波技术,它可以对图像进行平滑处理,减少图像中的噪声和细节,使得图像看起来更加模糊、柔和。在很多图像处理场景中,如边缘检测前的预处理、去除图像中的高频噪声等,都会用到高斯模糊。

高斯模糊的原理

高斯模糊的核心思想是基于高斯函数,它通过对图像中的每个像素点及其邻域像素进行加权平均来实现模糊效果。具体步骤如下:

  1. 定义高斯核:高斯核是一个二维的矩阵,其元素值由高斯函数计算得出。高斯函数的特点是中心的值最大,随着距离中心的增加,值逐渐减小。这意味着在进行加权平均时,中心像素的权重最大,离中心越远的像素权重越小。
  2. 卷积操作:将定义好的高斯核应用到图像的每个像素上,对该像素及其邻域像素进行加权平均。通过这种方式,图像中的高频信息(如噪声、细节)会被平滑掉,从而实现模糊效果。

高斯模糊会让图片变得更模糊。模糊的程度取决于高斯核的大小和标准差。

  • 高斯核大小:高斯核的大小通常是一个奇数,如 (3, 3)(5, 5) 等。核的大小越大,参与加权平均的邻域像素就越多,模糊效果也就越明显。
  • 标准差:标准差控制着高斯函数的分布范围。标准差越大,高斯核中的元素值分布越分散,离中心较远的像素权重相对增加,模糊效果也会更强烈。

代码示例

下面是一个使用 cv2.GaussianBlur 对图像进行高斯模糊处理的示例代码:

import cv2# 读取图像
image = cv2.imread('example.jpg')# 进行高斯模糊处理
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 显示原始图像
cv2.imshow('Original Image', image)# 显示模糊后的图像
cv2.imshow('Blurred Image', blurred_image)# 等待按键事件,按任意键关闭窗口
cv2.waitKey(0)# 关闭所有打开的窗口
cv2.destroyAllWindows()

使用 cv2.GaussianBlur 函数对图像进行高斯模糊处理,高斯核大小为 (5, 5),标准差为 0。运行代码后,可以看到模糊后的图像比原始图像更加模糊。

1. 代码

  • 函数名cv2.GaussianBlur
    OpenCV 中用于实现高斯模糊的函数。
  • 输入参数
    • frame_gray:输入的灰度图像(需为单通道图像)。
    • (5, 5):高斯核的尺寸(宽度和高度)。
    • 0:高斯核在 X 轴方向的标准差(sigmaX)。
  • 输出:返回处理后的模糊图像,并赋值给 frame_gray

2. 参数详解

(1) 高斯核尺寸 (5, 5)
  • 作用
    定义高斯核的大小,控制模糊范围。核越大(如 7x7),模糊效果越强,但计算量也越大。
  • 要求
    • 必须为正奇数(如 3, 5, 7),否则 OpenCV 会自动调整为最近的奇数。
    • 宽度和高度可以不同(如 (5, 3)),但通常保持一致以避免方向性模糊。
(2) 标准差 sigmaX = 0
  • 作用
    控制高斯核的分布宽度(标准差)。sigmaX 是 X 轴方向的标准差,sigmaY(未指定时默认与 sigmaX 相同)是 Y 轴方向的标准差。
  • 设置为 0 的含义
    sigmaX = 0 时,OpenCV 会根据核的尺寸自动计算一个合适的标准差(通常为 0.3 * (kernel_size / 2) - 1 的形式)。这简化了参数设置,适合大多数场景。

3. 高斯模糊的数学原理

高斯模糊通过高斯核与图像像素的卷积实现:

  • 高斯核:是一个二维正态分布矩阵,中心权重最大,向四周递减。
  • 卷积运算:每个像素的值被替换为周围像素的加权平均值(权重由高斯核决定),从而平滑图像。

例如,一个 5x5 的高斯核示意图如下(中心权重最大):

[0.003 0.013 0.022 0.013 0.003]
[0.013 0.059 0.097 0.059 0.013]
[0.022 0.097 0.159 0.097 0.022]
[0.013 0.059 0.097 0.059 0.013]
[0.003 0.013 0.022 0.013 0.003]

在图像处理中,“噪声” 指的是图像中出现的 随机的、不必要的干扰信号,这些信号会破坏图像的清晰度和真实性,导致图像质量下降。简单来说,噪声是图像中不符合正常像素分布规律的异常像素,表现为局部区域的亮度、颜色或纹理出现无规则的紊乱。

一、噪声的具体表现

  1. 视觉上的直观表现

    • 图像中出现孤立的 亮点、暗点(如“椒盐噪声”中的黑白斑点)。
    • 整体画面呈现 颗粒感、模糊感条纹、噪点(如低光环境下拍摄的照片常出现的“高斯噪声”)。
    • 颜色异常,例如局部区域颜色与周围明显不协调。
  2. 像素层面的本质
    噪声是图像中像素值的 随机波动。例如,在灰度图像中,某个像素的灰度值本应是 50,但由于噪声干扰,实际值可能变成 30 或 70,偏离了真实值。

二、噪声的常见类型

根据噪声的分布和特性,常见类型包括:

  1. 椒盐噪声(Salt-and-Pepper Noise)

    • 表现为图像中随机出现的 白色(高灰度值)或黑色(低灰度值)斑点,类似撒在图像上的盐粒(白)和胡椒粒(黑)。
    • 成因:传感器故障、数据传输错误、图像压缩过度等。
  2. 高斯噪声(Gaussian Noise)

    • 像素值的分布符合 高斯(正态)分布,表现为图像整体模糊或有细腻的颗粒感(如低光照下的图像噪声)。
    • 成因:传感器热噪声、电路干扰等。
  3. 泊松噪声(Poisson Noise)

    • 常见于低光照或高感光度拍摄的图像,噪声强度与信号强度相关(信号越弱,噪声越明显)。
  4. 周期性噪声(Periodic Noise)

    • 表现为图像中重复出现的 条纹、网状图案(如扫描图像时的电磁干扰)。

三、噪声的主要来源

  1. 硬件因素

    • 图像传感器(如相机 CCD/CMOS)的 电子噪声(热噪声、读出噪声)。
    • 镜头污染、光学系统缺陷导致的干扰。
  2. 环境因素

    • 拍摄时的 低光照条件(传感器需放大信号,噪声随之放大)。
    • 电磁干扰(如雷达、无线电信号对图像传输的影响)。
  3. 处理过程

    • 图像压缩(如 JPEG 压缩时的块效应)。
    • 数字化过程中的 采样误差(如分辨率不足导致的伪像)。

四、噪声的影响

噪声会干扰图像处理的后续操作,例如:

  • 边缘检测 中,噪声可能被误判为边缘,导致检测结果出现大量伪边缘。
  • 目标识别 中,噪声可能掩盖真实特征,降低算法准确率。
  • 图像分割 中,噪声可能导致区域划分错误。

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

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

相关文章

[密码学基础]密码学发展简史:从古典艺术到量子安全的演进

密码学发展简史:从古典艺术到量子安全的演进 密码学作为信息安全的基石,其发展贯穿人类文明史,从最初的文字游戏到量子时代的数学博弈,每一次变革都深刻影响着政治、军事、科技乃至日常生活。本文将以技术演进为主线,…

PostgreSQL认证培训推荐机构

首先来看一张2025年4月份db-engines上的数据库排行情况,前三名是雷打不动的Oracle、MySQL、Microsoft SQL Server,排名第四的就是我们今天的主角 - PostgreSQL数据库,从这张图上可以看出,PostgreSQL数据库的上升超非常明显&#x…

STM32 CubeMx下载及安装(一)

CubeMx及Java下载安装(一) 1 背景1.1 基本介绍1.2 主要特点1.3 相关准备 2 软件下载2.1 Java 官网下载2.2 CubeMx官网下载2.4 CubeMX网盘下载 3 软件安装3.1 Java 软件安装3.1.1 安装过程 3.2 CubeMx软件安装 总结 1 背景 1.1 基本介绍 STM32CubeMX&am…

Spring Boot 应用优雅关闭

写这篇文章是因为看到 “线程池在使用结束后应该正确关闭.” 那么如果我们的 Spring 应用都无法正确关闭, 那么线程池肯定也无从保障 1. 优雅关闭 kill with pid, without -9 大多数情况下无须在意这个问题, 正确使用 kill 命令关闭就行 (注意不能使用 kill -9) kill $(cat …

linux与c语言基础知识(未全部完成)

文章很多处理论,没办法写出来,(linux的一些理论问题,我有时间后,会逐个解决) 文章大多数的理论来字这个链接, C语言快速入门-C语言基础知识-CSDN博客 一. linux(Ubuntu) …

面试经历(一)雪花算法

uid生成方面 1:为什么用雪花算法 分布式ID的唯一性需要保证,同时需要做到 1:单调递增 2:确保安全,一个是要能体现出递增的单号,二一个不能轻易的被恶意爬出订单数量 3:含有时间戳 4&#…

基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b(提供软件版本下载) 3.部分核心程序 (完整版代码包…

深度强化学习 pdf 董豪| 马尔科夫性质,马尔科夫过程,马尔科夫奖励过程,马尔科夫决策过程

深度强化学习 pdf 百度云 hea4 pdf 主页 概念 马尔可夫奖励过程和价值函数估计的结合产生了在绝大多数强化学习方法中应用的核心结果——贝尔曼 (Bellman)方程。最优价值函数和最优策略可以通过求解贝尔曼方程得到,还将介绍三种贝尔曼 方…

验证Kubernetes的服务发现机制

验证Kubernetes的服务发现机制 文章目录 验证Kubernetes的服务发现机制[toc]一、验证基于环境变量的服务发现机制 服务发现是让客户端能够以固定的方式获取到后端Pod访问地址的机制。下面验证环境变量和DNS这两种机制。 一、验证基于环境变量的服务发现机制 对于需要访问服务…

FPGA系列之DDS信号发生器设计(DE2-115开发板)

一、IP核 IP(Intellectual Property)原指知识产权、著作权等,在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能(如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等)并且参数可修改的电路模块&#xff0c…

Java单例模式详解:实现线程安全的全局访问点

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、什么是单例模式? 单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类仅有一个实例&#xff…

JVM 生产环境问题定位与解决实战(七):实战篇——OSSClient泄漏引发的FullGC风暴

本文已收录于《JVM生产环境问题定位与解决实战》专栏,完整系列见文末目录 引言 在前六篇博客中,我们系统性地学习了 JVM 生产环境问题定位与解决的全套工具链,涵盖jps、jmap、jstat、jstack、jcmd 等基础工具的使用技巧,深入剖析…

Spark集群搭建-spark-local

(一)安装Spark 安装Spark的过程就是下载和解压的过程。接下来的操作,我们把它上传到集群中的节点,并解压运行。 1.启动虚拟机 2.通过finalshell连接虚拟机,并上传安装文件到 /opt/software下 3.解压spark安装文件到/op…

Java 异常 SSLException: fatal alert: protocol_version 全解析与解决方案

在 Java 网络通信中,SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 协议版本不兼容异常。本文结合 Java 官方规范、TLS 协议标准及实战经验,提供体系化解决方案,帮助开发者快速定位并解决协议版本冲突问题。 一、异常本质&…

虚拟列表技术深度解析:原理、实现与性能优化实战

虚拟列表技术深度解析:原理、实现与性能优化实战 引言 在当今数据驱动的互联网应用中,长列表渲染已成为前端开发的核心挑战。传统的一次性全量渲染方式在数据量超过千条时,往往导致页面卡顿、内存飙升等问题。虚拟列表(Virtual L…

2025-04-20 李沐深度学习4 —— 自动求导

文章目录 1 导数拓展1.1 标量导数1.2 梯度:向量的导数1.3 扩展到矩阵1.4 链式法则 2 自动求导2.1 计算图2.2 正向模式2.3 反向模式 3 实战:自动求导3.1 简单示例3.2 非标量的反向传播3.3 分离计算3.4 Python 控制流 硬件配置: Windows 11Inte…

Redis的使用总结

Redis 核心使用场景 缓存加速 高频访问数据缓存(如商品信息、用户信息) 缓解数据库压力,提升响应速度 会话存储 分布式系统共享 Session(替代 Tomcat Session) 支持 TTL 自动过期 排行榜/计数器 实时排序&#x…

富文本编辑器实现

🎨 富文本编辑器实现原理全解析 📝 基本实现路径图 #mermaid-svg-MO1B8a6kAOmD8B6Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MO1B8a6kAOmD8B6Y .error-icon{fill:#552222;}#mermaid-s…

LeetCode热题100——283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出:…

与Ubuntu相关命令

windows将文件传输到Ubuntu 传输文件夹或文件 scp -r 本地文件夹或文件 ubuntu用户名IP地址:要传输到的文件夹路径 例如: scp -r .\04.py gao192.168.248.129:/home/gao 如果传输文件也可以去掉-r 安装软件 sudo apt-get update 更新软件包列表 sudo apt insta…