目标

在这里,将学习以下功能:

  • cv2.VideoCapture()
  • cv2.VideoWriter()

从相机中读取视频

通常情况下,用摄像机捕捉实时画面。提供了一个非常简单的界面。从摄像头捕捉一段视频(使用的是笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。只是一个简单的任务开始。要捕获视频,需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。正常情况下,只有一个摄像头会被连接(就像我的情况一样)。所以简单地传0(或-1)。此外,如果有多个摄像头的话,可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获。在最后记得进行释放。

import cv2
import numpy as np
cap = cv2.VideoCapture(0)  # 第一个摄像头
if not cap.isOpened():print("can not open camera")exit()while True:# 逐帧捕获ret, frame = cap.read()# 如果正确读取帧,ret为Trueif not ret:print("Can't receive frame (stream end?). Exiting ...")break# 将当前帧转换为灰度图gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示结果帧cv2.imshow('frame', gray)if cv2.waitKey(1) == ord('q'):break# 完成所有操作后,释放捕获器
cap.release()
cv2.destroyAllWindows()
  • cap.read()返回布尔值( True / False )。如果正确读取了帧,它将为 True 。因此,你可以通过检查此返回值来检查视频的结尾。
    有时,cap可能尚未初始化捕获。在这种情况下,此代码显示错误。你可以通过cap.isOpened()方法检查它是否已初始化。如果是 True ,那么确定是打开的。否则,使用cap.open()打开它。还可以使用 cap.get(propId)方法访问该视频的某些功能,其中propId是0到18之间的一个数字。每个数字表示视频的属性(如果适用于该视频),并且可以显示完整的详细信息在这里看到:cv2::VideoCapture::get()。其中一些值可以使用cap.set(propId,value)进行修改。 value是想要的新值。

从文件播放视频

它与从相机捕获相同,只是用视频文件名更改摄像机索引。另外,在显示框架时,请使用适当的时间 cv.waitKey() 。如果太小,则视频将非常快,但如果设置得太大,则视频将变得很慢。正常情况下25毫秒就可以了。

import cv2
import numpy as npcap = cv2.VideoCapture('vtest.avi')
while cap.isOpened():ret, frame = cap.read()if not ret:print("Can't receive frame (stream end?). Exiting ...")breakgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('frame', gray)if cv2.waitKey(1) == ord('q'):break
cap.release()
cv2.destroyAllWindows()

保存视频

捕捉一个视频,一帧一帧地处理, 如果想要保存这个视频。对于图像,它非常简单,只需使用 cv2.imwrite()。但是对于视频而言,这里还需要做一些工作。首先创建一个 VideoWriter 对象。应该指定输出文件名(例如: output.avi)。然后应该指定 FourCC 代码以及传递帧率的数量和帧大小。最后一个是颜色标志。如果为True ,编码器期望颜色帧,否则它与灰度帧一起工作。FourCC:http://en.wikipedia.org/wiki/FourCC 是用于指定视频编解码器的4字节代码。可用代码列表可在fourcc.org中:http://www.fourcc.org/codecs.php 找到。它取决于平台。遵循编解码器来说效果很好。

  • 在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生成大尺寸的视频。X264会生成非常小的尺寸的视频)
  • 在Windows中:DIVX(尚待测试和添加)
  • 在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。

FourCC代码作为MJPG的 cv2.VideoWriter_fourcc('M','J','P','G') or cv2.VideoWriter_fourcc(*'MJPG') 传递。在从摄像机捕获的代码下面,沿垂直方向翻转每一帧并保存

import cv2
import numpy as npcap = cv2.VideoCapture(0)
#  定义编解码器并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpend():ret, frame = cap.read()if not ret:print("Can't receive frame (stream end?). Exiting ...")breakframe = cv2.flip(frame, 0)# 写翻转的框架out.write(frame)cv2.imshow('frame', frame)if cv2.waitKey(1) == ord('d'):break
# 完成工作后释放所有内容
cap.release()
out.release()
cv2.destroyAllWindows()

opencv:02 读取视频,显示视频,保存视频相关推荐

  1. Opencv 图片 读取,显示,保存基本操作

    Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/ 为了使用方 便,主要是使用opencv的python版本的接口,其官网链接 ...

  2. opencv 读取、显示、保存视频

    方法 描述 cv.VideoCapture() 初始化摄像头,0开启第一个摄像头,1开启第2个摄像头,返回摄像头对象,一般会自动打开摄像头 cap.read() 读取摄像头帧,返回值1表示是否成功读取 ...

  3. OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ OpenCV的作用在于让开发人员更容易地通过编码来处理图像.那么,处理图像需要执行哪些操作呢?图像处理的基本操作包含4个方面的内容:读取图像.显示图 ...

  4. opencv--python(一)图像和视频处理之读取,显示和保存

    1. 图片的读取,保存与显示: 1)调用opencv import numpy as np import cv2img_path = "D:/DL/AI-future/af2019-cv-t ...

  5. Python-OpenCV 笔记1 -- 图像与视频的读取、显示、保存

    Python-OpenCV 笔记1 – 图像与视频的读取.显示.保存 一.图片的读取.显示.保存 1.图片读取 原型: imread (filename, flags=None) 参数: filena ...

  6. OpenCV 2.图像入门:读取、显示、保存

    OpenCV 中文官方文档:http://woshicver.com/ 图像入门:读取.显示.保存 cv.imread(),cv.imshow(),cv.imwrite() cv.imread()函数 ...

  7. C++ openCV 图像的读取、显示、保存、加权融合、改变对比度、修改色域

    文章目录 图像的读取.显示.保存 图像的读取 图像的显示 图像的保存 图像的属性修改 图像的色域修改 图像的对比度.数据类型修改 两张图像的加权融合 图像的读取.显示.保存 使用的命名空间 #prag ...

  8. 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作

    文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...

  9. [转载] OpenCV-Python 图像处理(二):图像的读取、显示与保存

    参考链接: Python OpenCV 基础 2 : imwrite 保存图像 说明: 本系列主要是学习OpenCV-Python文档的个人笔记.很少有理论的叙述,都是函数名.参数描述.作用.应用场景 ...

  10. C#使用EmguCV库(图像读取、显示、保存)(二)

    使用C#+EmguCV处理图像入门(图像读取_显示_保存)二 上个随笔已经介绍EmguCV的一些常用库和程序安装以及环境变量的配置,这次写的是如何使用这个类库对图像进行操作. EmguCV图像处理系统 ...

最新文章

  1. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置
  2. 开源性能测试工具JMeter快速入门(一)
  3. jquery找祖先包含_Jquery的parent和parents(找到某一特定的祖先元素)
  4. mysql附加服务器失败_今天,启动MySQL服务器失败,
  5. sqlite3x library
  6. Linux程序设计实验项目六,《linux程序设计》实验教学大纲
  7. dll注入的一种方式
  8. 让secureCRT正确显示中文
  9. python 进程池pool
  10. 不同机器,打印速度相差巨大
  11. node http创建正向代理_Node.JS实战20:用execFile执行外部程序
  12. 关于 用git clone 命令时报错RPC failed; curl 56 Recv failure....’ 的解决办法
  13. 二维数组传参(二维数组作为函数参数)
  14. 计算机视觉 — BOF图像检索
  15. 跟我学-域名解析故障排查技巧
  16. python去中心化_EOS区块链dApp去中心化应用汇总
  17. 伦敦大学国王学院计算机学院官网,伦敦大学国王学院 King’s College London
  18. Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题
  19. 建模常用的概念介绍1: WOE、IV
  20. oracle中top命令详解,top命令-leonwang202-ChinaUnix博客

热门文章

  1. 我花了两天把接外包的血泪写了出来
  2. 很好的UI动效设计参考
  3. 2个域名2个网站共用一个空间的方法
  4. 计算机禁止usb,win7系统使用组策略禁用usb端口的四种方法-系统城
  5. PT100/PT1000温度采集电路方案
  6. 6-8 简单阶乘计算(10 分) 本题要求实现一个计算非负整数阶乘的简单函数。
  7. 喜讯:我司通过ISO9001质量管理体系认证!
  8. GNU Guile 2.0.9 发布,Scheme 实现
  9. 连接mysql数据库实验_Jdbc连接数据库实验报告(1)
  10. package 与 package-lock文件的区别