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

OpenCV对椒盐处理后的视频进行均值滤波处理

代码实现:

import cv2
import numpy as np
sp = cv2.VideoCapture('test.avi')
def add_peppersalt_noise(frame,n=10000):result = frame.copy()h,w= frame.shape[:2]for i in range(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 result
if not sp.isOpened():print('无法打开视频文件')exit()
while True:ret,frame = sp.read() # ret 布尔值 判断是否读到视频帧 frame是读到的帧if not ret:breakframe = cv2.resize(frame, (540, 380))cv2.imshow('video',frame)noise = add_peppersalt_noise(frame)medianB = cv2.medianBlur(noise, 3)cv2.imshow('noise',noise)cv2.imshow('medianBlur',medianB)if cv2.waitKey(1) == 27:break
sp.release()
cv2.destroyAllWindows()

代码解释:

这段代码实现了对视频添加椒盐噪声椒盐噪声(salt-and-pepper noise)并使用中值滤波进行去噪处理的功能,主要分为视频读取、噪声添加、去噪处理和结果显示四个部分。以下是详细解释:

1. 导入库

import cv2  # OpenCV库,用于视频处理和图像处理
import numpy as np  # NumPy库,用于生成随机数和数组操作

2. 打开视频文件

sp = cv2.VideoCapture('test.avi')  # 创建视频捕获对象,读取本地视频文件'test.avi'

cv2.VideoCapture 用于打开视频文件或摄像头,这里传入视频路径表示读取本地文件。

3. 定义添加椒盐噪声的函数

def add_peppersalt_noise(frame, n=10000):result = frame.copy()  # 复制原始帧,避免修改原图h, w = frame.shape[:2]  # 获取图像的高度(h)和宽度(w)for i in range(n):  # 循环n次,添加n个噪声点x = np.random.randint(1, h)  # 随机生成x坐标(1到h-1之间)y = np.random.randint(1, w)  # 随机生成y坐标(1到w-1之间)if np.random.randint(0, 2) == 0:  # 50%概率生成"椒噪声"(黑色点)result[x, y] = 0  # 像素值设为0(黑色)else:  # 50%概率生成"盐噪声"(白色点)result[x, y] = 255  # 像素值设为255(白色)return result  # 返回添加噪声后的图像

​​​​​​​椒盐噪声:图像中随机出现的黑色点(椒噪声,值为 0)和白色点(盐噪声,值为 255),模拟图像传感器干扰或传输错误。

参数 n 控制噪声数量(默认 10000 个),值越大噪声越密集。

4. 检查视频是否打开成功

if not sp.isOpened():print('无法打开视频文件')exit()  # 打开失败则退出程序

​​​​​​​isOpened() 用于判断视频是否成功打开(路径错误、文件损坏等会导致失败)。

5. 循环处理视频帧

while True:ret, frame = sp.read()  # 读取一帧视频# ret:布尔值,True表示读取成功;frame:当前帧的图像数组(numpy数组)if not ret:break  # 读取失败或视频结束,退出循环# 调整帧大小(可选,便于显示)frame = cv2.resize(frame, (540, 380))  # 缩放到宽540、高380像素# 显示原始视频帧cv2.imshow('video', frame)# 对当前帧添加椒盐噪声noise = add_peppersalt_noise(frame)cv2.imshow('noise', noise)  # 显示带噪声的帧# 对噪声帧进行中值滤波去噪medianB = cv2.medianBlur(noise, 3)  # 3×3卷积核的中值滤波cv2.imshow('medianBlur', medianB)  # 显示去噪后的帧# 按ESC键(ASCII码27)退出循环if cv2.waitKey(1) == 27:break

中值滤波cv2.medianBlur):对椒盐噪声去噪效果极佳,原理是用邻域内像素的中值替换中心像素,能有效去除极端值(黑白噪声点)。

cv2.waitKey(1):等待 1 毫秒,同时检测按键,确保窗口刷新和交互。

6. 释放资源

sp.release()  # 释放视频捕获对象
cv2.destroyAllWindows()  # 关闭所有显示窗口

必须在程序结束时释放资源,避免内存泄漏。

整体效果

运行后会显示三个窗口:

video:原始视频帧

noise:添加椒盐噪声后的视频帧(可见大量黑白斑点)

medianBlur:中值滤波处理后的视频帧(噪声明显减少,图像较清晰)

通过对比可以直观看到中值滤波对椒盐噪声的去除效果。如果噪声更严重,可增大 add_peppersalt_noise 中的 n 值,或调整 medianBlur 的卷积核大小(如 5,需为奇数)。

输出结果:

​​​​​​​

http://www.lryc.cn/news/620808.html

相关文章:

  • 短剧小程序系统开发:赋能创作者,推动短剧艺术创新发展
  • 【软件测试】自动化测试 — selenium快速上手
  • BitDock——让你的Windows桌面变为Mac
  • 如何查看SQL Server的当前端口
  • filezilla mac新版本MacOS-12.6.3会自动进入全屏模式BUG解决方法
  • 我的第一个开源项目-jenkins集成k8s项目
  • 软件测试中,常用的抓包工具有哪些?抓包的原理是什么?
  • FPGA读取AHT20温湿度模块思路及实现,包含遇到的问题(IIC协议)
  • 快速部署一个鉴黄服务
  • React数据请求
  • Android 项目:画图白板APP开发(二)——历史点、数学方式推导点
  • 2.0t的涡轮增压器结构设计说明书cad【5张】设计说明说
  • OpenSatKit技术详解
  • 《Leetcode》-面试题-hot100-动态规划
  • C++实现序列匹配与分类处理
  • 深度学习-卷积神经网络CNN-批量归一化 BatchNorm
  • React和Vue
  • React 中播放HLS 视频流 ,超简单的组件高度复用
  • 2019 GPT2原文 Language Models are Unsupervised Multitask Learners - Reading Notes
  • 微美全息(WIMI.US)借区块链与聚类技术,开启物联网去中心化安全架构新纪元
  • C#WPF实战出真汁03--登录功能实现
  • 阿里云Spring Cloud架构分析
  • 无人机双目视觉设计要点概述!
  • .Net4.0 WPF中实现下拉框搜索效果
  • 4. 索引数据的增删改查
  • MyBatis Interceptor 深度解析与应用实践
  • Mybatis学习笔记(一)
  • 【密码学实战】基于SCTP的DTLS协议实验
  • springboot项目不同平台项目通过http接口AES加密传输
  • AR技术赋能电力巡检:智能化升级的“秘密武器”