当前位置: 首页 > 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.xdnf.cn/news/1298215.html

相关文章:

  • 基于机器学习的文本情感极性分析系统设计与实现
  • [论文阅读] 人工智能 + 软件工程 | 代码变更转自然语言生成中的幻觉问题研究解析
  • 爬虫逆向--Day15--核心逆向案例2(Python逆向实现请求加密、请求堆栈、拦截器关键字)
  • PostgreSQL 免安装
  • SQL详细语法教程(三)mysql的函数知识
  • ActionChains 鼠标操作笔记
  • PyCharm 2025.2:面向工程师的 AI 工具
  • IDEA、Pycharm、DataGrip等激活破解冲突问题解决方案之一
  • C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
  • 20道Vue框架相关前端面试题及答案
  • OpenCV ------图像基础处理(一)
  • Elasticsearch ABAC 配置:基于患者数据的动态访问控制
  • Exif.js获取手机拍摄照片的经纬度
  • 风电功率预测实战:从数据清洗到时空建模​​
  • 机器翻译:回译与低资源优化详解
  • C# 高并发处理方式
  • 【每天一个知识点】生物的数字孪生
  • 如何选择适合工业场景的物联网网关?
  • TWINCAT+COPLEY ethercat配置
  • week1-[分支嵌套]公因数
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • C++:浅尝gdb
  • 云计算-Docker Compose 实战:从OwnCloud、WordPress、SkyWalking、Redis ,Rabbitmq等服务配置实例轻松搞定
  • Mybatis学习笔记(七)
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • 跨域及解决方案
  • AI搜索重构下的GEO优化服务商格局观察
  • 一致性哈希Consistent Hashing