使用OpenCV库来捕获摄像头视频流,并按指定格式保存

news2024/9/25 7:23:08

今天我们来使用OpenCV库来捕获摄像头视频流,并将其保存为AVI格式的视频文件,

代码的主要功能包括:

  1. 初始化摄像头捕获对象。
  2. 设置视频编解码器和输出文件路径。
  3. 循环读取视频帧,处理并保存到文件中。
  4. 显示处理后的视频帧。
  5. 按下'q'键退出程序。
  6. 释放资源并关闭所有窗口。
  • 运行环境需要安装OpenCV库,可以通过pip install opencv-python安装。

下面这份代码的保存视频的格式是AVI

import numpy as np  
import cv2  
  
# 初始化摄像头  
cap = cv2.VideoCapture(0)  
  
# 检查摄像头是否成功打开  
if not cap.isOpened():  
    print("Error: Cannot open camera.")  
    exit()  
  
# 设置视频编码、输出路径、帧率、分辨率  
fourcc = cv2.VideoWriter_fourcc(*'XVID')  
out = cv2.VideoWriter('path\output.avi', fourcc, 30.0, (640, 480))  
  
while cap.isOpened():  
    ret, frame = cap.read()  
    # 检查是否成功读取到帧  
    if ret:  
        # 水平翻转帧  
        frame = cv2.flip(frame, 1)  
        # 写入翻转后的帧到视频文件  
        out.write(frame)  
        # 显示帧  
        cv2.imshow('frame', frame)  
          
        # 按'q'键退出循环  
        if cv2.waitKey(1) & 0xFF == ord('q'):  
            break  
    else:  
        # 如果读取帧失败,则跳出循环  
        break  
  
# 释放摄像头和视频写入对象  
cap.release()  
out.release()  
# 关闭所有OpenCV窗口  
cv2.destroyAllWindows()

 但是往往这种格式我们不是想要的,更多的是使用MP4格式

import numpy as np  
import cv2  
  
# 初始化摄像头  
cap = cv2.VideoCapture(0)  
  
# 检查摄像头是否成功打开  
if not cap.isOpened():  
    print("Error: Cannot open camera.")  
    exit()  
  
# 设置视频编码、输出路径、帧率、分辨率  
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  
out = cv2.VideoWriter('path\\output.mp4', fourcc, 30.0, (640, 480))  
  
while cap.isOpened():  
    ret, frame = cap.read()  
    # 检查是否成功读取到帧  
    if ret:  
        # 水平翻转帧  
        frame = cv2.flip(frame, 1)  
        # 写入翻转后的帧到视频文件  
        out.write(frame)  
        # 显示帧  
        cv2.imshow('frame', frame)  
          
        # 按'q'键退出循环  
        if cv2.waitKey(1) & 0xFF == ord('q'):  
            break  
    else:  
        # 如果读取帧失败,则跳出循环  
        break  
  
# 释放摄像头和视频写入对象  
cap.release()  
out.release()  
# 关闭所有OpenCV窗口  
cv2.destroyAllWindows()

代码中的path就是你实际想要保存视频的路径 ,如果实在不知道路径,可以打开资源管理器进行查看,如下图所示

这两份代码只是保存的视频格式不一样,处理方法都是一样的,运行完以后会有一个叫frame的cv窗口出现,这里显示的图像是实时进行录制的图像

 注意如果需要录制多个视频,需要修改代码中视频的命名,也就是这一行

out = cv2.VideoWriter('path\\output.mp4', fourcc, 30.0, (640, 480))  

把output改个命名,否则下一次保存视频会把上一次的视频进行覆盖

运行完这两份代码后,对应的路径下保存的文件就会呈现出两个不同格式的视频文件

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

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

相关文章

Python | 处理海洋2C 数据 | 非标准时间格式

写在前面 最近,师弟在用Python读取某海洋2C数据时,突然冒出一个报错:“时间单位的参考日期无效,当前日期 00:00:00.0”。这让我回想起,似乎在很久很久以前,我处理SMAP和Argo数据时也遇到过类似的问题。为了…

JavaScript 模块化开发:ES6 模块与 CommonJS 的对比与应用

​ ​ 您好,我是程序员小羊! 前言 随着前端项目规模的增长,代码组织和管理变得越来越复杂。模块化开发成为解决这一问题的有效手段,能够帮助开发者将代码进行分割、复用和维护。JavaScript 在发展过程中出现了多种模块化规范&…

【精通SDL之----使用PBO异步传输像素数据】

使用PBO异步传输像素数据 前言一、 一些GPU 分配的常用内存对象介绍二、 PBO 传输原理三、 PBO 使用方法 前言 书接上文【精通SDL之----SDL_RenderReadPixels截屏】,SDL_RenderReadPixels在GLES2上是一个非常耗时的操作,因为   1. OpenGL ES 是一个异步…

.NET Razor类库 - 静态资源组件化

1. 找到Razor类库 打开VS2022 文件 - 新建 - 项目 或者 使用 CtrlShiftN 快捷键 输入Razor 搜索 , 选中Razor类库, 点击 下一步2.创建Razor类库项目 输入项目名称 IX.RCL.Front RCL 是 RazorClassLibrary的简称意思 Front 代表前端静态资源的意思 位…

KEIL Stm32 bin文件生成的两种方法以及报错的处理

Keil里生成bin文件的方法有两种,记录如下,以免忘记~ 首先,在Keil主页面,点击如下按钮,打开Options for Target ‘target 1’对话框,并选择User标签页。 其次,通过在 User标签页 设置 “After B…

一种基于 JavaEE 的合同管理系统,用于存储、管理和跟踪合同的软件工具,功能很完善(附源码)

前言 在现代企业管理中,合同管理是一项至关重要的任务。传统的手动管理合同不仅耗时耗力,而且容易出现错误和遗漏,导致合同执行效率低下,甚至面临法律风险。随着业务的不断扩展,越来越多的企业开始寻求一种更为高效、…

作为HR,如何解决简历筛选难度大的问题

简历筛选需要耗费大量的时间和精力,尤其是当应聘者过多的情况下,往往让HR精疲力竭,而且效率低下。当下也有很多这方面的工具可以辅助的,如:招聘管理,简历解析类等。 借助软件,可以更好的获取简…

GLM-4-Flash 大模型API免费了,手把手构建“儿童绘本”应用实战(附源码)

老牛同学刚刷到了一条劲爆的消息,GLM-4-Flash大模型推理 API 免费了:https://bigmodel.cn/pricing 老牛同学一直觉得上次阿里云百炼平台为期 1 个月免费额度的“羊毛”已经够大了(太卷了,阿里云免费 1 个月大模型算力额度&#xf…

什么是BI?BI系统的功能有哪些?哪些人需要BI工具支持?

什么是BI? BI是商业智能(Business Intelligence)的缩写。它是指通过收集、整理、分析和可视化企业内部和外部数据,从中获得洞察信息和决策支持的技术和流程。BI利用数据分析工具和技术,帮助企业管理者和决策者更好地理…

Cesium 展示——获取指定区域地形的最大最小高程

文章目录 需求分析方法一:方法二:需求 在地图上勾选某一处的区域,分析获取区域内最大最小高程 分析 方法一: function getAreaHeight(viewer, positions) {const startP = positions[0

备考AMC10美国数学竞赛2024:吃透1250道真题和知识点(持续)

有什么含金量比较高的初中生数学竞赛吗?美国数学竞赛AMC10是个不错的选择。那么,如何备考AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题,可以帮助孩子找到真实竞赛…

解决tensorflow模型加载时把GPU显存占满的问题(亲测效果显著)

第一次用tensorflow模型进行推理。 初始状态下,显存的占用情况 模型加载后,电脑显存直接快拉满了,但是模型参数量并不大,这就很奇怪,究竟这是一股什么神秘的力量,竟要试图侵占我可怜的显卡宝贝 原因分析:安装了tensor…

fastadmin表单中二维数组组件+图片上传

记录&#xff1a;fastadmin表单中二维数组组件图片上传 add.html代码 <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(Quanyi)}:</label><div class"col-xs-12 col-sm-10"><style>…

多个FeignClient使用相同服务名报错问题:使用contextId区分不同FeignClient

一、概述 在项目开发中&#xff0c;由于多个 FeignClient 使用了相同的 name &#xff0c;导致SpringBoot启动时出现 BeanDefinitionOverrideException 异常。 解决方案是在每个 FeignClient 上添加唯一的 contextId&#xff0c;如 userFeignClient 和 helloWorldFeignClient…

低功耗高效率同步降压变换器SiLM6880/SiLM6881 为工业应用领域电源提供强力支撑

为了满足现代电子设备对性能和能耗的更高要求&#xff0c;并不断推动电源技术的优化与创新&#xff0c;深力科推荐一款——低功耗、高效率的同步降压变换器SiLM6880/SiLM6881。 SiLM6880/SiLM6881具有宽泛的输入电压范围&#xff08;6V~80V&#xff09;&#xff0c;能适应各种电…

LLM分布式预训练浅析

随着深度学习的不断进步&#xff0c;语言模型的规模越来越大&#xff0c;参数量级已经达到了数千亿甚至数万亿&#xff0c;参数规模的指数增长带来了两个巨大的挑战 1&#xff09;模型参数过大&#xff0c;如GLM 130B模型参数需要520GB&#xff08;130B*4bytes&#xff09;的显…

【Latex】Latex 简介和安装

Latex LaTeX 是一种基于排版的文档准备系统&#xff0c;广泛用于创建高质量的科学和数学文档。它的核心是 TeX 语言&#xff0c;由美国计算机科学家 Donald Knuth 在 1978 年开发。LaTeX 简化了文档的格式化过程&#xff0c;尤其是在处理复杂的公式、引用、表格、图表等方面&a…

Java IO精髓:高效块读写入技术深入解析

文件的复制 首先我们先用昨天学习的知识来完成文件的复制,使用read和write方法来完成。 public static void main(String[] args) throws IOException {FileInputStream fis new FileInputStream("./image.png");FileOutputStream fos new FileOutputStream("…

OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/141561865 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

加速边缘智能技术落地!移远通信推出全功能ARM主板QSM560DR、QSM668SR系列

8月22日&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出其两款全功能ARM主板——QSM560DR与QSM668SR系列。 作为智能设备开发与硬件设计的核心平台&#xff0c;这两款ARM主板以卓越的集成度和性能、广泛的兼容性以及丰富的功能接口&#xff0…