版本

# 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读取视频文件或摄像头,并进行保存帧图像或视频相关推荐

  1. python调用usb摄像头_Python通过cv2读取多个USB摄像头

    本文实例为大家分享了Python通过cv2读取多个USB摄像头的具体代码,供大家参考,具体内容如下 通过 cv2 可以轻易的拿到摄像头数据. 比如以下几步就能打开摄像头显示,并通过 q 键保存图片 i ...

  2. Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接

    Python 二维码的读取与生成演示 ① 使用链接生成二维码 ② 读取二维码里的链接 [ 文章推荐 ] Python 绘制中国地图:使用 pyecharts 最新版本绘制中国地图实例详解,个性化地图定 ...

  3. OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)

    一.视频读取 cv::VideoCapture既支持视频文件的读取,也支持从摄像机中视频的读取.cv::VideoCapture对象的创建方式有以下三种: 方式一:     cv::VideoCapt ...

  4. 怎样找到ant压缩这个软件_怎样才能压缩MOV视频文件呢?学会这样,轻松压缩MOV视频!...

    原标题:怎样才能压缩MOV视频文件呢?学会这样,轻松压缩MOV视频! 在我们日常娱乐和日常工作中,我们时常会看见许多视频,,也会下载很多视频.如果想要将一个MOV视频文件上传,却发现MOV视频文件过大 ...

  5. python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  6. python编程单词排序_Python读取英文文件并记录每个单词出现次数后降序输出示例...

    本文实例讲述了Python读取英文文件并记录每个单词出现次数后降序输出.分享给大家供大家参考,具体如下: 对文中出现的句号,逗号和感叹号做了相应的处理 sorted排序函数用法: 按照value值降序 ...

  7. python处理mat数据_python读取.mat文件的数据及实例代码

    首先导入scipy的包 from scipy.io import loadmat 然后读取 m = loadmat("F:/__identity/activity/论文/data/D001. ...

  8. 【Python 2.7】xlrd读取Excel文件

    这篇博文参考于<Python 数据处理> 读取Excel文件需要用到xlrd模块,模块下载地址:xlrd下载地址 本博文中Excel文件下载地址:SOWC 2014 Stat Tables ...

  9. python cv2读取图片后进行通道变换以及PIL阅读图像的通道转换

    读取的 图片的格式是HxWx3,像素值在0-1之间 img = cv2.imread('b.png') print(img.shape) img = img.permute(2,0,1) #如果进行H ...

最新文章

  1. ffmpeg开发指南(使用 libavformat 和 libavcodec)
  2. mysql,in中重复的记录也查出的方法
  3. 边缘AI:国内首个高性能神经网络认知+项目实战发布
  4. jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...
  5. centos 6.0 rpm 包编译环境的搭建
  6. 【JavaScript 封装库】BETA 2.0 测试版发布!
  7. JAVA 中一个非常轻量级只有 200k 左右的 RESTful 路由框架
  8. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
  9. 可执行文件内存补丁文件补丁工具
  10. 三个一工程_C语言阶段第二阶段部分程序整理
  11. c语言课程设计找出肇事车牌,C语言课程设计报告01.doc
  12. 图像处理的边缘和纹理的区别
  13. ps形状工具组的使用
  14. 愚人节的背后:技术在一面打假,一面造假
  15. edge打开pdf不显示印章_教你PDF文档无法在edge中打开怎么解决
  16. python ps_python前端之Photoshop
  17. 如何提高深度学习的泛化能力?
  18. 【redis】ERR AUTH <password> called without any password configured for the default user解决
  19. Spring Container Extension
  20. 常熟理工学院计算机专业排名2015,2019年常熟理工学院优势专业排名及分数线

热门文章

  1. 【数据增强】---- 使用 Pytorch 裁剪图片并保存
  2. 年活跃买家数超8亿,拼多多成为国民级零售交易、服务平台
  3. Fragment 跳转切换刷新
  4. sharemouse pro_出乎意料的高规格 华硕B460重炮手主板评测(全文)_华硕 TUF GAMING B460M-PRO_游戏硬件主板...
  5. oracle 排序太慢,Oracle 排序优化
  6. SwiftUI 官方教程 (一)
  7. const指针用法总结
  8. iPhone12系列手机均支持5G
  9. P3393 逃离僵尸岛 最短路dijkstra
  10. Mac下搭建java环境与卸载