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

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

今天我们来使用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.mrgr.cn/news/11433.html

相关文章:

  • wxml与标准的html的异同?
  • Sketch for mac(专业矢量绘图设计软件100.3版) 中文激活版 一键快速安装!
  • 对各项数据的统计汇总,集中展示,便于查看厂区情况的智慧物流开源了。
  • Java学习第一天
  • 手写Spring框架(简单实现)
  • Spring横向渗透
  • ClickHouse分布式部署搭建单分片二副本集群
  • 外包干了2年,女朋友跑了...
  • 【Docker】Docker学习01 | 什么是docker?
  • 回归预测|基于北方苍鹰优化正则化极限学习机的数据预测Matlab程序NGO-RELM 多特征输入单输出
  • 软件设计师全套备考系列文章16 -- 程序设计语言基础知识
  • Java核心概念之(线程、进程、同步、互斥)
  • 【Java设计模式】异步方法调用模式:通过异步编程提升性能
  • 仿Muduo库实现高并发服务器——Acceptor模块
  • Java进阶13讲__第五讲
  • SpringBoot如何进行全局异常处理?
  • Windows系统电脑安装多个Tomcat服务教程
  • MathType7.8.0.0最新破解补丁器+永久免费激活码
  • C++ | Leetcode C++题解之第374题猜数字大小
  • minikube kubevirt 部署实践