Python使用CV2库捕获、播放和保存摄像头视频

news/2024/10/17 22:17:57/

Python使用CV2捕获、播放和保存摄像头视频

特别提示:CV2指的是OpenCV2(Open Source Computer Vision Library),安装的时候是 opencv_python,但在导入的时候采用 import cv2。

若想使用cv2库必须先安装,Python第三方cv2库安装和使用介绍可参见 https://blog.csdn.net/cnds123/article/details/126547307

需要你的计算机有摄像头,笔记本一般内置有摄像头,若是台式机可以连接一个USB摄像头。

捕获视频帧

使用 OpenCV 可以捕获摄像头输出的视频流,并且可以对每一帧视频进行处理。下面是一个简单的示例代码,演示如何从摄像头中捕获视频帧并显示到屏幕上:

import cv2#定义cv2.VideoCapture 类型的对象  
cap = cv2.VideoCapture(0)#isOpened() 用来判断是否捕获到视频
if not cap.isOpened():print("无法打摄像机")exit()while True:# 如果正确读取帧,ret为True,cap.read() 方法从摄像头中读取一帧视频ret, frame = cap.read()if not ret:break # 显示帧视频cv2.imshow('frame', frame)# 按 'q' 键退出程序if cv2.waitKey(1) == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

说明,VideoCapture 对象传入了参数 0,表示设备索引,设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以我简单地传0。你可以通过传递1来选择第二个相机,以此类推。

运行效果如下:

捕获视频帧保存

把视频保存到本地,可以使用cv2.VideoWriter()方法,需要设置输出视频的文件名、编解码器、帧速率和帧大小等参数。VideoWriter() 有5个参数:

参数1:输出文件名,例如: d:/output.mp4。

参数2:FourCC 代码,FourCC 是用于指定视频编解码器的4字节代码。

参数3:帧率的数量。

参数4:帧大小。

参数5:颜色标志。如果为 True,正常颜色输出,否则就是灰色图像输出。

VideoWriter_fourcc()编码方法,常见的视频格式参数:

cv2.VideoWriter_fourcc('M', 'P', '4', 'V')

MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('X','2','6','4')

MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('I', '4', '2', '0')

该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件

cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')

该参数是MPEG-1编码类型,文件名后缀为.avi

cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')

该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小

cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')

该参数是Ogg Vorbis,文件名后缀为.ogv

cv2.VideoWriter_fourcc('F', 'L', 'V', '1')

该参数是Flash视频,文件名后缀为.flv

下面是一个简单的例子:

import cv2# 打开摄像头
cap = cv2.VideoCapture(0)if not cap.isOpened():print("无法打摄像机")exit()# 设置输出视频的参数
fourcc = cv2.VideoWriter_fourcc(*'MP4V')  # 其中*'MP4V'和 'M', 'P', '4', 'V'等效
out = cv2.VideoWriter('d:/output.mp4', fourcc, 20.0, (640, 480))while True:# 读取视频帧ret, frame = cap.read()if not ret:break# 显示视频帧——播放视频cv2.imshow('frame',frame)# 将视频帧写入输出视频out.write(frame)# 按 'q' 键退出循环if cv2.waitKey(1) == ord('q'):break# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

运行后,将在你指定的路径产生找到生成的文件,我这里是d:/output.mp4。


http://www.ppmy.cn/news/55581.html

相关文章

【C++】 小项目---宠物小屋的分析设计与开发实现

目录 需求 分析设计 动物类 笼子类 房子类 人类 小贴士 整体设计图 开发实现 动物类 笼子类 房子类 人类 小贴士 控制台主函数 需求 动物猫(CCat)、狗(CDog)、蛇(CSnake),包含名字&…

【福利赠书】有人说,测试驱动开发已死?(文末赠书3本)

友情推荐一本测试领域的教科书:(文末送3本) 《 测试驱动开发:入门、实战与进阶》,英文原书名为《Learning Test-Driven Development 》,是一本实用且有趣的TDD实践教程。如果你想开始做测试驱动开发&#x…

基于全过程通道相关像素值顺序的彩色图像可逆数据隐藏

文献学习: 基于全过程通道相关像素值顺序的彩色图像可逆数据隐藏 原文题目: Reversible data hiding for color images based on pixel value order of overall process channel. 发表期刊: Signal Processing(中科院二区&#xf…

设计模式之建造者模式

1、什么是建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于…

OpenCV——概率霍夫检测

概率霍夫变换是一种基于泛洪算法的直线检测算法。相较于传统霍夫变换&#xff0c;概率霍夫变换可以在保证一定的精度前提下&#xff0c;大大提高了直线检测效率。下面是 OpenCV C 实现概率霍夫检测的示例代码&#xff1a; #include <opencv2/opencv.hpp> #include &l…

华为OD机试真题(Java),整数编码(100%通过+复盘思路)

一、题目描述 实现一个整数编码方法&#xff0c;使得待编码的数字越小&#xff0c;编码后所占用的字节数越小。 编码规则如下&#xff1a; 编码时7位一组&#xff0c;每个字节的低7位用于存储待编码数字的补码&#xff1b;字节的最高位表示后续是否还有字节&#xff0c;置1表…

《利用光体积描记图信号的模糊递推特性估计无袖带血压的级联卷积神经网络模型》阅读笔记

目录 一、论文摘要 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一…

Java并发(三)----创建线程的三种方式及查看进程线程

一、直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务} }; // 启动线程 t.start(); 例如&#xff1a; // 构造方法的参数是给线程指定名字&#xff0c;推荐 Thread t1 new Thread("t1") {Override// run 方法内实现…