Python利用VideoCapture读取视频或摄像头并进行保存
作者:AI算法联盟 发布时间:2022-12-06 18:26:27
标签:Python,VideoCapture,读取,视频,摄像头
一、语法:cap = cv2.VideoCapture(0)
说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture('video.mp4')
二、语法:cap.isOpened()
说明:判断视频对象是否成功读取,成功读取视频对象返回True。
三、语法:ret,frame = cap.read()
说明:按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False。frame为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),读取的图像为BGR格式。
四、语法:key = cv2.waitKey(1)
说明:等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停。
五、读取摄像头并保存为视频代码演示
import cv2
def videocapture():
cap=cv2.VideoCapture(0) #生成读取摄像头对象
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取视频的宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取视频的高度
fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #视频的编码
#定义视频对象输出
writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read() #读取摄像头画面
cv2.imshow('teswell', frame) #显示画面
key = cv2.waitKey(24)
writer.write(frame) #视频保存
# 按Q退出
if key == ord('q'):
break
cap.release() #释放摄像头
cv2.destroyAllWindows() #释放所有显示图像窗口
if __name__ == '__main__' :
videocapture()
六、读取视频并按帧进行保存代码演示:
import numpy as np
import cv2
import os
def video2image(video_dir,save_dir):
cap = cv2.VideoCapture(video_dir) #生成读取视频对象
n = 1 #计数
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取视频的宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取视频的高度
fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #视频的编码
# 定义视频输出
#writer = cv2.VideoWriter("teswellvideo_02_result.mp4", fourcc, fps, (width, height))
i = 0
timeF = int(fps) #视频帧计数间隔频率
while cap.isOpened():
ret,frame = cap.read() #按帧读取视频
#到视频结尾时终止
if ret is False :
break
#每隔timeF帧进行存储操作
if (n % timeF == 0) :
i += 1
print('保存第 %s 张图像' % i)
save_image_dir = os.path.join(save_dir,'%s.jpg' % i)
print('save_image_dir: ', save_image_dir)
cv2.imwrite(save_image_dir,frame) #保存视频帧图像
n = n + 1
cv2.waitKey(1) #延时1ms
cap.release() #释放视频对象
#读取文件夹所有视频,每个视频按帧保存图像
def video2image_multi(video_path,save_path):
video_list = os.listdir(video_path)
for i in range(len(video_list)) :
video_dir = os.path.join(video_path,video_list[i])
cap = cv2.VideoCapture(video_dir)
fps = cap.get(cv2.CAP_PROP_FPS) # 视频的帧率
save_num = 0
n = 1 #计数
timeF = int(fps) # 视频帧计数间隔频率
while cap.isOpened():
ret,frame = cap.read()
if ret is False :
break
#每隔timeF帧进行存储操作
if (n % timeF == 0) :
save_num += 1
save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))
cv2.imwrite(save_image_dir,frame)
n = n + 1
cv2.waitKey(1)
cap.release()
print('读取第 %s 个视频完成 !!!' % i)
if __name__ == '__main__' :
video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')
来源:https://blog.csdn.net/weixin_40922285/article/details/102967331


猜你喜欢
- 本文实例讲述了js鼠标滑过图片震动特效的方法。分享给大家供大家参考。具体实现方法如下:<html><head><
- 英文原文:The seven rules of Unobtrusive JavaScript原文地址:http://icant.co.uk/
- 前言本文主要给大家介绍了关于python中用Future对象回调别的函数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的
- 继上一篇计算checksum校验和,本章通过socket套接字,struct字节打包成二进制,select返回套接字的文件描述符的结合,实现
- 1、获取元素 2、获取数据 3、绑定数据 4、隔行换色&
- 阅读上一篇:W3C优质网页小贴士(二) 注意字体大小网页设计者中有这么一种倾向:他们认为小字体能让网页看起来更漂亮,并能提供更多空间给每个网
- 喜欢Gucci的优雅吗?或者痴迷美国普普艺术?谷歌中国最近改版的谷歌个性化首页iGoogle集中了近1500个主题,包括近120多位全球顶级
- (1)如下代码,默认递归获取指定目录root_dir下的所有文件,当指定recursive参数为False时,则只获取root_dir目录下
- range(x)range(9) 代表着0、1、2、3、4、5、6、7、8 这九个顺序数字的集合。也就是 range(9) => ra
- 1、定义和使用列表在Python中,列表是由一系列元素按照特定的顺序构成的数据结构,也就是说列表类型的变量可以存储多个数据,且可以重复。1.
- 本文分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价。本想分篇介绍,发现有点画蛇添足。整理了下也没多少拿得出手的方法,自然有一
- 前些日子做了一个项目关于vue项目需要头像裁剪上传功能,看了一篇文章,在此基础上做的修改完成了这个功能,与大家分享一下。原文:https:/
- 本篇目标抓取淘宝MM的姓名,头像,年龄抓取每一个MM的资料简介以及写真图片把每一个MM的写真图片按照文件夹保存到本地熟悉文件保存的过程&nb
- tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。tem
- python 3.4 所写爬虫仅仅是个demo,以百度图片首页图片为例。能跑出图片上的图片;使用 eclipse pydev 编写:from
- 技术栈:uniapp-H5+uniapp-微信小程序(vue3+vite2+ts)前言:在单位做项目的时候碰到一个需求,需要从微信小程序跳转
- 目标:在64位linux系统上编译出32位程序。操作:1.执行 go env 查看当前go环境配置2.执行 export GOARCH=38
- 背景介绍最近遇到一个需求,大致就是要获取某个小程序上的数据。心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据。在网上
- python实战,用户答题分享给大家。主要包含内容,文件的读取,更改,保存。不同文件夹引入模块。输入,输出操作。随机获取数据操作随机生成算数
- 一、表结构TABLE personidname1你2你(一个空格)3你(二个空格)二、查询与结果select * from person w