python(二)进阶之cv2读取视频文件或摄像头,并进行保存帧图像或视频
版本
# 4.5.1
python
import cv2
cv2.__version__
函数
# 参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径,
# 例如:cap = cv2.VideoCapture('video.mp4'),或者参数填视频的url也是可以的
cap = cv2.VideoCapture(0)# 判断视频对象是否成功读取,成功读取视频对象返回true
# 判断载入的视频是否可以打开
cap.isOpened()# 按帧读取视频,返回值ret是布尔型,正确读取则返回true,读取失败或未读取到视频结尾返回false
# frame 为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),
# 读取的图像为BGR格式
ret,frame = cap.read()# 等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停
key = cv2.waitKey(1)
读取摄像头并保存为视频代码演示
from cv2 import cv2def 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) #显示画面# 延时,如果设置很大值得话就会一卡一卡那样# 1秒24帧,感觉和这个有关系key = cv2.waitKey(24)writer.write(frame) #视频保存# 按Q退出if key == ord('q'):breakcap.release() #释放摄像头cv2.destroyAllWindows() #释放所有显示图像窗口if __name__ == '__main__' :videocapture()
读取视频并按帧进行保存代码演示
import numpy as np
import cv2
import osdef 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 = 0timeF = int(fps) #视频帧计数间隔频率while cap.isOpened():ret,frame = cap.read() #按帧读取视频#到视频结尾时终止if ret is False :break#每隔timeF帧进行存储操作if (n % timeF == 0) :i += 1print('保存第 %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 + 1cv2.waitKey(1) #延时1mscap.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 = 0n = 1 #计数timeF = int(fps) # 视频帧计数间隔频率while cap.isOpened():ret,frame = cap.read()if ret is False :break#每隔timeF帧进行存储操作if (n % timeF == 0) :save_num += 1save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))cv2.imwrite(save_image_dir,frame)n = n + 1cv2.waitKey(1)cap.release()print('读取第 %s 个视频完成 !!!' % i)if __name__ == '__main__' :video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')
cap.get() cap.set()
当代码报错时,可以使用cap.isOpened()
来检查是否成功初始化了,返回值是True,就没有问题,否则就要使用cap.open()
。
可以使用cap.get(propId)
来获取视频的一些参数信息。propId可以是0到18之间的任何数,每一个数代表一个属性,自己可以尝试一下。
其中一些值可以使用cap.set(propId,value)
来修改,例如cap.get(3)和cap.get(4)
来查看每一帧的宽和高,默认是640x480。我们可以使用ret=cap.set(3,320)和ret = cap.set(4,240)
来把宽和高改成320x240。
int propID -----这个参数指定你要更改的属性。这个参数有很多可选项,这里列出一部分。
# 视频的当前位置(毫秒)
CV_CAP_PROP_POS_MSEC# 视频的当前位置(帧)
CV_CAP_PROP_POS_FRAMES# 视频流的宽度
CV_CAP_PROP_FRAME_WIDTH# 视频流的高度
CV_CAP_PROP_FRAME_HEIGHT# 帧速率(帧/秒)
CV_CAP_PROP_FPS# 编码器的四字符编码
CV_CAP_PROP_FOURCC# 获取重定向地址
setopt(pycurl.FOLLOWLOCATION, 1)
问题
non-existing SPS 0 referenced in buffering period
网上找到的原因是下面这个
这个是因为你前面放进去解的一些帧并没有送SPS和PPS. 为什么没有送SPS和PPS呢,一个原因就是解码速度快于接收速度。例如开线程去解码了。
在我自己爬虫的项目中具体表现是,文件只有4k左右,因为是直播,根据链接下载的文件并不能播放,这应该是造成no frame
的原因吧
部分内容转载自:
https://blog.csdn.net/weixin_40922285/article/details/102967331
https://www.kancloud.cn/aollo/aolloopencv/260405
python(二)进阶之cv2读取视频文件或摄像头,并进行保存帧图像或视频相关推荐
- python调用usb摄像头_Python通过cv2读取多个USB摄像头
本文实例为大家分享了Python通过cv2读取多个USB摄像头的具体代码,供大家参考,具体内容如下 通过 cv2 可以轻易的拿到摄像头数据. 比如以下几步就能打开摄像头显示,并通过 q 键保存图片 i ...
- Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接
Python 二维码的读取与生成演示 ① 使用链接生成二维码 ② 读取二维码里的链接 [ 文章推荐 ] Python 绘制中国地图:使用 pyecharts 最新版本绘制中国地图实例详解,个性化地图定 ...
- OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)
一.视频读取 cv::VideoCapture既支持视频文件的读取,也支持从摄像机中视频的读取.cv::VideoCapture对象的创建方式有以下三种: 方式一: cv::VideoCapt ...
- 怎样找到ant压缩这个软件_怎样才能压缩MOV视频文件呢?学会这样,轻松压缩MOV视频!...
原标题:怎样才能压缩MOV视频文件呢?学会这样,轻松压缩MOV视频! 在我们日常娱乐和日常工作中,我们时常会看见许多视频,,也会下载很多视频.如果想要将一个MOV视频文件上传,却发现MOV视频文件过大 ...
- python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...
小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...
- python编程单词排序_Python读取英文文件并记录每个单词出现次数后降序输出示例...
本文实例讲述了Python读取英文文件并记录每个单词出现次数后降序输出.分享给大家供大家参考,具体如下: 对文中出现的句号,逗号和感叹号做了相应的处理 sorted排序函数用法: 按照value值降序 ...
- python处理mat数据_python读取.mat文件的数据及实例代码
首先导入scipy的包 from scipy.io import loadmat 然后读取 m = loadmat("F:/__identity/activity/论文/data/D001. ...
- 【Python 2.7】xlrd读取Excel文件
这篇博文参考于<Python 数据处理> 读取Excel文件需要用到xlrd模块,模块下载地址:xlrd下载地址 本博文中Excel文件下载地址:SOWC 2014 Stat Tables ...
- python cv2读取图片后进行通道变换以及PIL阅读图像的通道转换
读取的 图片的格式是HxWx3,像素值在0-1之间 img = cv2.imread('b.png') print(img.shape) img = img.permute(2,0,1) #如果进行H ...
最新文章
- ffmpeg开发指南(使用 libavformat 和 libavcodec)
- mysql,in中重复的记录也查出的方法
- 边缘AI:国内首个高性能神经网络认知+项目实战发布
- jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...
- centos 6.0 rpm 包编译环境的搭建
- 【JavaScript 封装库】BETA 2.0 测试版发布!
- JAVA 中一个非常轻量级只有 200k 左右的 RESTful 路由框架
- ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
- 可执行文件内存补丁文件补丁工具
- 三个一工程_C语言阶段第二阶段部分程序整理
- c语言课程设计找出肇事车牌,C语言课程设计报告01.doc
- 图像处理的边缘和纹理的区别
- ps形状工具组的使用
- 愚人节的背后:技术在一面打假,一面造假
- edge打开pdf不显示印章_教你PDF文档无法在edge中打开怎么解决
- python ps_python前端之Photoshop
- 如何提高深度学习的泛化能力?
- 【redis】ERR AUTH <password> called without any password configured for the default user解决
- Spring Container Extension
- 常熟理工学院计算机专业排名2015,2019年常熟理工学院优势专业排名及分数线
热门文章
- 【数据增强】---- 使用 Pytorch 裁剪图片并保存
- 年活跃买家数超8亿,拼多多成为国民级零售交易、服务平台
- Fragment 跳转切换刷新
- sharemouse pro_出乎意料的高规格 华硕B460重炮手主板评测(全文)_华硕 TUF GAMING B460M-PRO_游戏硬件主板...
- oracle 排序太慢,Oracle 排序优化
- SwiftUI 官方教程 (一)
- const指针用法总结
- iPhone12系列手机均支持5G
- P3393 逃离僵尸岛 最短路dijkstra
- Mac下搭建java环境与卸载