Opencv提供了VideoCapture类和VideoWriter类来支持各种格式的视频文件。在到达视频文件末尾之前VideoCapture类可以通过read()函数来获取新的帧,每一帧是一幅BGR格式的图像。
可将一幅传递给VideoWriter类的write()函数,该函数会将这幅图像加到VideoWriter类所指向的文件中下面是一个例子,读取MP4文件,并采用YUV颜色编码将其写入另一帧中:

import cv2
videoCapture=cv2.VideoCapture('myvid.mp4')
fps=videoCapture.get(cv2.CAP_PROP_FPS)
size=(int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter=cv2.VideoWriter('MyOutPut.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size
)
success,frame=videoCapture.read()
while success:videoWriter.write(frame)success,frame=videoCapture.read()

要注意:必须要为VideoWriter类的构造函数指定视频文件名,这个文件名对应的文件若存在,会被覆盖。也必须指定视频编解码器。编解码器的可能性根据系统不同而不同:

  • cv2.VideoWriter_fourcc(‘I’,‘4’,‘2’,‘0’):该选项是一个未压缩的YUV颜色编码,是4:2:0色度子采集。这种编码兼容性较好,但文件较大,扩展名为.avi
  • cv2.VideoWriter_foucc('P','I','M','I'):该选项是MPEG-1编码类型,扩展名为.avi
  • cv2.VideoWriter_foucc('X','V','I','D'):该选项是MPEG-4编码类型,如果希望得到的视频大小为平均值,推荐使用此选项,文件扩展名.avi
  • cv2.VideoWriter_foucc('T','H','E','O'):该选项Ogg Vorbis,文件扩展名应为.ogv。
  • cv2.VideoWriter_foucc('F','L','V','I'):该选项是一个Flash视频,文件扩展名应为.flv
    帧速率和帧大小也应该指定,因为需要从另一个视频复制视频帧,这些属性可以通过VideoCapture类的get()函数得到。

捕获摄像头帧:
VideoCapture类可以获得摄像头的帧流。但对摄像头而言,通常不是用视频的文件名来构造VideoCapture类,而是需要传递摄像头的设备索引(device index)。

import cv2
cameraCapture=cv2.VideoCapture(0)
fps=30
size=(int (cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int (cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter=cv2.VideoWriter('MyOutPutVid.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size
)
success,frame=cameraCapture.read()
numFramesRemaining=10*fps-1
while success and numFramesRemaining>0:videoWriter.write(frame)success,frame=cameraCapture.read()numFramesRemaining -=1
cameraCapture.release()

但VideoCapture类的get()方法不能返回摄像头速率的准确值,总是返回0。
为了针对摄像头创建合适的VideoWriter类,要么对帧数率做出假设,要么使用计时器来测量,后一种更加好一些。
摄像头的数目和顺序系统决定。但OpenCV没有提供任何查询摄像头数目和属性的方法。如果使用无效索引构造了VideoCapture类,就不会得到帧,VideoCapture的read()函数会返回(false,None)。为了不让read()函数从没有正确打开的VideoCapture类中获取数据,可在执行该函数之后使用VideoCa.isOpened方法一个判断,该方法返回一个Boolean值。
当需要同步一组摄像头或多头(multihead)摄像头(例如立体摄像头或kinect)时,read()不合适,可用grab()和retrive()代替,可使用以下代码:

success0=cameraCaputer0.grad()
success1=cameraCapture1.grad()
if success0 and success1:frame0=cameraCapture0.retrive()frame1=cameraCapture1.retrive()

python-opencv学习笔记(三)相关推荐

  1. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  2. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  3. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  4. Opencv学习笔记(三) -- 图像压缩与保存

    1.图像压缩 1.1常用图像格式 bmp Windows位图格式.该格式为不压缩格式,缺点是图像文件较大. jpg JPEG是为静态图像所建立的第一个国际数字图像压缩标准,也是至今一直在使用的.应用最 ...

  5. OpenCV学习笔记三-Mat数据结构

    主要记录Mat数据结构的一些操作 P3 Mat 数据结构的一些操作 #include<opencv2/opencv.hpp> #include<iostream>using n ...

  6. python opencv学习笔记之数米粒,并返回每一个米粒的位置面积及总个数平均面积

    之前曾经写过一道数米粒的作业,当时用的是c++中的opencv,这次用python试了一下. 原图及效果图 咦?水印怎么去啊 程序流程 程序的大致流程为: 1.读取图片 2.灰度化 3.二值化 4.膨 ...

  7. Programming Computer Vision with Python (学习笔记三)

    概要 原书对于PCA的讲解只有一小节,一笔带过的感觉,但我发现PCA是一个很重要的基础知识点,在机器机视觉.人脸识别以及一些高级图像处理技术时都被经常用到,所以本人自行对PCA进行了更深入的学习. P ...

  8. opencv学习笔记三十六:AKAZE特征点检测与匹配

    KAZE是日语音译过来的 , KAZE与SIFT.SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的关键点也就更准确(尺度不变性 ): Hessian矩阵特征点检测 ,方向指定, ...

  9. brisk matlab,opencv学习笔记三十七:BRISK特征点检测与匹配

    简介 BRISK算法是2011年ICCV上<BRISK:Binary Robust Invariant Scalable Keypoints>文章中,提出来的一种特征提取算法,也是一种二进 ...

  10. Python OpenCV学习笔记之:图像读取,显示及保存

    为什么80%的码农都做不了架构师?>>>    #-*- coding: utf-8 -*- # 读取,保存,显示图片 import cv2 as cv# 读取为灰度图片 img = ...

最新文章

  1. centos 5.5 mysql 5.5.39_CentOS 5.5 下安装 Mysql 5.5
  2. 游戏设计模式——面向数据编程思想
  3. mysql查询优化explain命令详解
  4. win8 mysql6_Win8系统 MySQL 6.0 安装图解
  5. 广州 智播客 学工部_播客:30岁的水管工如何转变职业并成为全职开发人员
  6. DNN: ModuleSettings Vs TabModuleSettings
  7. 使用免费软件Emu8086学习汇编
  8. Mac上编译mingw
  9. 自定义形状的ImageView制作
  10. java 计算中位数方法
  11. XMind中怎么导入图标?
  12. maven-replacer-plugin 静态资源打包方案js css
  13. 经历“海潮效应”,云图如何成为智能家居界的苹果?
  14. win10动态壁纸怎么设置_教程丨WIN10系统下设置固定IP或动态IP
  15. spark-sql-perf
  16. python爬虫爬取高清图片——爬虫入门
  17. 直击|支付宝还信用卡下月开始收费 每月2000免费额度
  18. Oracle表空间清理
  19. 如何让别人听懂你说的话
  20. matlab如何求解sbm模型,非期望产出的SBM模型代码问题

热门文章

  1. CentOS7服务管理(重启,停止,自动启动命令)
  2. 西门子S7comm-plus通信过程及重放攻击分析
  3. MySql 主从模式原理及操作步骤
  4. MFC使用http post请求上传文件
  5. Oracle_高级功能(3) synonym和database link
  6. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)
  7. c#计算 坐标点与坐标点之间的距离
  8. mongdb安装配置
  9. 第三章:选择结构(一)
  10. Django:django-user2安装相关问题