【Python高级编程】 综合练习-使用OpenCV 进行视频数据处理
综合练习
读取一个视频文件,对其进行处理后保存为一个新的视频文件。具体的处理步骤包括调整帧大小、转换为灰度图像、垂直翻转画面以及添加高斯噪声。
下面是代码的详细实现:
import cv2
import numpy as np# 定义一个函数,用来给图像添加高斯噪声
def add_gaussian_noise(image):# 获取图像的行和列row, col = image.shapemean = 0 # 高斯噪声的平均值sigma = 15 # 高斯噪声的标准差# 生成高斯噪声gauss = np.random.normal(mean, sigma, (row, col))# 将高斯噪声添加到原图像上noisy = image + gauss# 将结果限制在0到255之间,并转换为无符号8位整型noisy_img = np.clip(noisy, 0, 255)return noisy_img.astype(np.uint8)# 输入和输出视频文件名
input_video = 'resources/outdoor.mp4'
output_video = 'resources/output.mp4'# 打开输入视频
cap = cv2.VideoCapture(input_video)# 获取视频的帧率和帧大小
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 计算新的帧大小(540p)
new_height = 540
new_width = int((new_height / frame_height) * frame_width)# 创建视频写入对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 指定视频编码格式
out = cv2.VideoWriter(output_video, fourcc, fps, (new_width, new_height), isColor=False)while True:ret, frame = cap.read() # 逐帧读取视频if not ret:break # 如果没有读取到帧,则退出循环# 调整帧大小frame = cv2.resize(frame, (new_width, new_height))# 转换为灰度图像frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 垂直翻转画面frame = cv2.flip(frame, 1)# 添加高斯噪声frame = add_gaussian_noise(frame)# 写入输出视频out.write(frame)# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
代码详细解释
-
导入必要的库
import cv2 import numpy as np -
定义添加高斯噪声的函数
def add_gaussian_noise(image):row, col = image.shapemean = 0sigma = 15gauss = np.random.normal(mean, sigma, (row, col))noisy = image + gaussnoisy_img = np.clip(noisy, 0, 255)return noisy_img.astype(np.uint8)- 该函数接收一个灰度图像,并向其添加高斯噪声。噪声的平均值为0,标准差为15。
-
设置输入和输出视频文件路径
input_video = 'resources/outdoor.mp4' output_video = 'resources/output.mp4' -
打开输入视频
cap = cv2.VideoCapture(input_video) -
获取视频的帧率和帧大小
fps = int(cap.get(cv2.CAP_PROP_FPS)) frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) -
计算新的帧大小
new_height = 540 new_width = int((new_height / frame_height) * frame_width)- 将帧的高度调整为540像素,并按比例计算新的宽度。
-
创建视频写入对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(output_video, fourcc, fps, (new_width, new_height), isColor=False)fourcc指定视频编码格式为MP4。out对象用于将处理后的帧写入输出视频文件,isColor=False表示输出视频为灰度图像。
-
逐帧读取和处理视频
while True:ret, frame = cap.read()if not ret:breakframe = cv2.resize(frame, (new_width, new_height))frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)frame = cv2.flip(frame, 1)frame = add_gaussian_noise(frame)out.write(frame)- 循环读取每一帧,直到视频结束。
- 将帧调整为新的大小,并转换为灰度图像。
- 对帧进行垂直翻转。
- 添加高斯噪声。
- 将处理后的帧写入输出视频。
-
释放资源
cap.release() out.release() cv2.destroyAllWindows()- 释放视频捕捉和写入对象,关闭所有OpenCV窗口。
通过这些步骤,原始视频将被处理并保存为一个新的灰度视频,视频中的每一帧都被调整大小、翻转并添加了高斯噪声。
相关文章:
【Python高级编程】 综合练习-使用OpenCV 进行视频数据处理
综合练习 读取一个视频文件,对其进行处理后保存为一个新的视频文件。具体的处理步骤包括调整帧大小、转换为灰度图像、垂直翻转画面以及添加高斯噪声。 下面是代码的详细实现: import cv2 import numpy as np# 定义一个函数,用来给图像添加…...
rs232和can的区别
在电机通讯和升级固件时我们经常用到RS232和CAN两种通讯模式,那这两种有何不同吗? RS232和CAN的主要区别在于通信方式、应用场景、传输距离、通信速度以及网络结构。 通信方式: RS232是一种串行通信接口标准,支持全双工通信&…...
嵌入式软件stm32面试
一、STM32的内核型号有哪些? STM32系列是STMicroelectronics(意法半导体)生产的基于ARM Cortex-M内核的微控制器产品线。这些产品按照不同的内核架构和性能特点分为了主流产品、超低功耗产品和高性能产品。 1.1 主流产品 STM32F0 系列&…...
【Git】-- 添加公钥到 github 或者gitlab上
仅针对系统:mac os 、 unix、linux 1、检查是否有 id_rsa.pub $ cd ~ $ ls -al ~/.ssh 注意:若已有 id_rsa.pub,则必要执行 第二步,避免覆盖掉原有正常的公钥。 配置多个 git 账号请参考:同一台电脑配置多个git账…...
Vue页面生成PDF后调起浏览器打印
一、安装依赖 首先,需要安装 html2canvas 和 jsPDF 库。 npm install html2canvas jspdf二、创建公共方法引入 在utils文件夹下创建两个文件分别为pdfExport.js和printPDF.js,代码如下: pdfExport.js import html2canvas from html2canv…...
纯前端实现导出excel
项目背景: vue2 插件: xlsx;xlsx-style;file-saver 说明: 单独使用 xlsx插件,也可以将网页上的table导出成excel,但是导出的excel,没有样式 结合xlsx-style;file-saver&a…...
QT windows 5.12.0 安装包
这个是在线包,需要有账号的。 没有也没事,安装界面可以现场注册 百度网盘链接: 链接:https://pan.baidu.com/s/1QvXDert4b94GbUfD2f2G4g?pwd8888 提取码:8888...
改进YOLOv7 | 在 ELAN 模块中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力机制 | 附详细结构图
改进 YOLOv7 | 在 ELAN 模块中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力机制:中文详解 1. 简介 YOLOv7 是目前主流的目标检测算法之一,具有速度快、精度高的特点。但 YOLOv7 的原始模型结构中缺乏注意力机制,导致模型对全…...
windows系统停止更新办法
windows系统停止更新 双击启动下载的文件 然后再回到系统-更新这里,选择日期就行。...
数据标注概念
数据标注的步骤 数据清洗:处理数据中的噪声、缺失值和异常值,确保数据的质量和完整性。 数据转换:将数据从原始格式转换为适合机器学习模型处理的格式。 数据标注:根据应用需求,为数据添加标签或注释,标识…...
网络安全复习笔记
概述 要素 CIA:可用性;完整性;保密性。 可控性;不可否认性;可审查性。 攻击 被动:窃听 - 保密性;监听 - 保密性主动:假冒 - 完整性;重放 - 完整性;改写 -…...
Laravel - excel 导入数据
在Laravel中,可以使用maatwebsite/excel这个库来处理Excel文件的导入。 1.用命令行窗口打开项目根目录,使用 Composer 安装 maatwebsite/excel composer require maatwebsite/excel --ignore-platform-reqs 在你的config/app.php文件中注册服务提供者&…...
移动语义和完美转发
C11 引入了许多新特性,使得编写高效且现代的 C 代码变得更加容易。其中,移动语义(Move Semantics)和完美转发(Perfect Forwarding)是两个重要的特性,极大地提升了 C 的性能和灵活性。 移动语义…...
【IDEA】Spring项目build失败
通常因为环境不匹配需要在file->projectstructure里面调整一下。...
【无标题】安卓app 流量
该工具可以用于安卓app 流量,内存,cpu,fps等专项内容测试,并且有整机内存,cpu对比,还可监控手机网速,app流量,数据导出等功能,重点还是免费,毕竟PerfDog收费了…...
国产化ETL产品必备的特性(非开源包装)
ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行抽取、清洗(净化)、转换、装载、标准、集成(汇总)...... 最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。…...
flink 操作mongodb的例子
Apache Flink 是一个流处理和批处理的开源框架,它通常用于处理大量数据流。然而,Flink 本身并不直接提供对 MongoDB 的原生支持,因为 MongoDB 是一个 NoSQL 数据库,而 Flink 主要与关系型数据库(如 JDBC 连接器&#x…...
【笔记】打卡01 | 初学入门
初学入门:01-02 01 基本介绍02 快速入门库处理数据集网络构建模型训练保存模型加载模型打卡-时间 01 基本介绍 MindSpore Data(数据处理层) ModelZoo(模型库) MindSpore Science(科学计算),包含…...
Rocky9使用cockpitweb登陆时root用户无法登陆
Rocky9使用cockpitweb登陆时root用户无法登陆 [rootlvs ~]# vim /etc/cockpit/disallowed-users [rootlvs ~]# systemctl restart cockpit 取消disallowed-users中的root,即可访问 ip:9090 登陆。...
微信小程序修改标题
要修改微信小程序页面的标题和调整字体大小,你需要对 app.json 和页面对应的 json 文件进行配置。 修改页面标题 打开 app.json 文件,找到 pages 字段,确认需要修改的页面路径。打开对应页面的 .json 文件(例如,pages/…...
基于RAG与本地向量数据库,为AI编程助手构建私有知识库
1. 项目概述:一个为开发者量身定制的本地知识库如果你是一名重度使用 Cursor 或 VS Code 这类 AI 驱动的代码编辑器的开发者,那么你一定遇到过这样的困境:当你在编辑器里向 AI 助手提问时,它给出的答案往往基于其训练时的通用知识…...
多线程交替打印
package org.example;public class Main {// 计数器private static int count 0;public static void main(String[] args) throws InterruptedException {// 线程 1Thread thread1 new Thread(() -> {while (count < 100) {// 尝试获取锁synchronized (Main.class) {//…...
AI协同编程:从代码生成到项目级开发的智能辅助实践
1. 项目概述:当AI成为你的技术合伙人最近在GitHub上看到一个挺有意思的项目,叫“ai-cofounder”。光看名字就挺吸引人,AI联合创始人?这听起来像是科幻电影里的情节。但点进去仔细研究后,我发现,这其实是一个…...
Claudish:轻量级Claude API代理网关的设计与实战
1. 项目概述:Claudish,一个为Claude API设计的轻量级代理网关 如果你最近在尝试将Anthropic的Claude模型集成到自己的应用里,大概率会遇到一个头疼的问题:官方API的调用方式,特别是流式响应(Streaming&…...
RAGxplorer:可视化调试工具,提升检索增强生成系统可观测性
1. 项目概述:RAGxplorer,一个为RAG系统打造的“X光机”如果你正在构建或优化一个基于检索增强生成(RAG)的系统,那么你一定遇到过这样的困惑:为什么用户的问题没有得到预期的答案?是检索的文档不…...
续:封装哈希表实现MyUnorderedMap MyUnorderedSet(复刻STL)
文章目录前言一、回顾核心设计:通用哈希表的适配性二、完整代码实现(复用通用哈希表,可直接复制)三、测试MyUnorderedMap & MyUnorderedSet(验证功能)四、核心知识点(面试高频,必…...
多AI代理协同编码框架:结构化工作空间解决单代理上下文崩溃
1. 项目概述:一个为多AI代理协同编码而生的结构化工作空间如果你和我一样,在过去一年里深度使用过Claude Code、Cursor或者GitHub Copilot这类AI编程助手,那你一定经历过这种“甜蜜的烦恼”:你给AI一个复杂的任务,比如…...
Taotoken模型广场如何帮助开发者根据任务与预算选择合适的模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken模型广场如何帮助开发者根据任务与预算选择合适的模型 面对众多大语言模型,开发者常面临一个核心问题…...
CANN/opbase AllocScalar API文档
AllocScalar 【免费下载链接】opbase 本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase 功能说明 申请一个aclScalar对象,并对其赋值。通过多个重载函数,用于支持…...
数据智能前沿:从过程分析到可信AI的跨学科研究与实践
1. 团队概览与核心研究方向在数据科学和人工智能领域,一个研究团队的深度和广度往往决定了其能否在基础理论与产业应用之间架起坚实的桥梁。今天要聊的,是围绕澳大利亚麦考瑞大学(Macquarie University)计算学院为核心,…...
