点击上方“AI搞事情”关注我们


一、 视频获取与显示

VideoCapture类实现视频获取,可以从摄像头或者文件进行视频读取。首先,创建一个VideoCapture对象,参数可以是设备索引(摄像头索引)或视频文件的名称。如果是设备索引,当只连接一台摄像机时,可以是0或-1;也可以通过传递1来选择第二个摄像头。然后,便可以通过该对象一帧一帧的获取视频图像帧。最后,释放VideoCapture对象。

显示视频图像帧,涉及到的opencv函数包括:
创建对象:cap = cv2.VideoCapture(0)
打开视频进行初始化:cap.open()
判断是否初始化成功:cap.isOpened()
读取视频帧:cap.read() 返回是否有图像帧以及图像帧数据。
获取视频的属性:cap.get(propld) propId从0-18,每个数字代表一个视频属性 。
设置视频属性值:cap.set(propId, value) 上述部分属性值可通过该函数设置,value表示更新值。
视频对象资源释放:cap.release()


从摄像头获取视频,并将其转换为灰度视频进行显示。

import cv2
import numpy as np# 从摄像头ID获取视频,从文件获取改为视频文件路径
cap = cv2.VideoCapture(0)
if not cap.isOpened():print("Cannot open camera")exit()
while(True):# 一帧帧读取视频zret, frame = cap.read()# 都每一帧进行处理gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示处理后图片cv2.imshow('frame', gray)#若检测到按键 ‘q’,退出if cv2.waitKey(1) & 0xFF == ord('q'):break# When everything done, release the capture
cap.release()#释放摄像头
cv2.destroyAllWindows()#删除全部窗口

二、 视频保存

VideoWriter类实现视频保存,首先,创建一个VideoWriter对象并指定输出文件名(例如:output.avi)。然后指定FourCC代码、帧率(FPS)、帧的高宽以及isColor标志,如果是True,则编码器需要彩色帧,否则它适用于灰度帧。

FourCC
用四个字符来表示压缩帧编码,可以在fourcc.org中找到可用代码列表。它取决于平台.

  • 在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2.(XVID更为可取.MJPG会产生高大小的视频.X264可以提供非常小的视频)

  • 在Windows中:DIVX(更多要测试和添加)

  • 在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

FourCC代码通过cv2.VideoWriter_fourcc()传递,比如:
对于MJPG,FourCC代码作为cv2.VideoWriter_fourcc('M','J','P','G')或cv2.VideoWriter_fourcc(*'MJPG')传递。

从文件获取视频,在垂直方向上翻转每一帧并保存它。

import cv2cap = cv2.VideoCapture('input.avi')# 创建VideoWriter对象,并设置fourcc
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))while cap.isOpened():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) & 0xFF == ord('q'):break# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()

三、 应用

预处理视频:从视频文件每隔5帧截取图像帧,水平镜像翻转后保存到文件夹。

import cv2cap = cv2.VideoCapture('input.avi')
num = 0
while cap.isOpened():ret, frame = cap.read()if ret:if num % 5 == 0:frame = cv2.flip(frame, 1)cv2.imwrite('frame_%d.jpg' % num, frame)if cv2.waitKey(1) & 0xFF == ord('q'):breaknum += 1# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()

长按二维码关注我们

有趣的灵魂在等你

【opencv系列03】OpenCV4.X视频捕获与显示相关推荐

  1. Python+OpenCV 图像处理系列(2)—— 视频捕获、播放和保存

    1.视频捕获 为了获取视频,首先需要创建一个 VideoCapture 类对象.它的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头.一般的笔记本电脑都有内置摄像头.所以 ...

  2. 利用opencv进行usb相机的视频捕获

    USB相机便宜,使用起来方便,而opencv也包含了读取USB相机视频数据的API函数.在windows xp中,该API函数是利用windows的VFW模块来实现的.下面,我给出 相应的参考代码: ...

  3. 【opencv系列08】OpenCV4.X图像融合操作

    点击上方"AI搞事情"关注我们 图像叠加 add(src1, src2, dst=None, mask=None, dtype=None)函数或者numpy操作实现图像按位相加,若 ...

  4. 【opencv系列07】OpenCV4.X图像基本操作

    点击上方"AI搞事情"关注我们 一.像素操作 可以通过行列坐标访问像素值,对于BGR图,返回一个蓝色.绿色.红色通道的数组值,对于灰度图,仅返回相应的强度值. 代码 import ...

  5. OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测

    我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...

  6. iOS 视频捕获系列Swift之AVFoundation(一)

    iOS 视频捕获系列之AVFoundation(一) AVCaptureMovieFileOutput系列 在iOS开发过程中,或多或少的都涉及视频的操作. 尤其在去年直播行业的带动下,移动端对视频的 ...

  7. 图像拼接(二):OpenCV同时打开两个摄像头捕获视频

    使用OpenCV实现同时打开两个USB摄像头,并实时显示视频.如果未检测有两个摄像头,程序会结束并发出"摄像头未安装好"的警告.这里推荐一个小巧的摄像头视频捕捉软件:amcap,使 ...

  8. OpenCV中的光流及视频特征点追踪

    OpenCV中的光流及视频特征点追踪 1. 效果图 2. 原理 2.1 什么是光流?光流追踪的前提.原理 2.2 光流的应用 2.3 光流的2种方法 3. 源码 3.2 稀疏光流追踪 3.2 优化版稀 ...

  9. 使用OpenCV和Python高效计算视频的总帧数

    使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...

最新文章

  1. 21岁华人本科生,凭什么拿下CVPR 2020最佳论文提名?
  2. php性能分析工具 - xhprof的安装使用
  3. 【计算理论】计算复杂性 ( 无向图独立集问题 | 独立集问题是 NP 完全问题证明思路 | 证明独立集问题是 NP 完全问题 )
  4. nova 命令汇总三 ——网络相关命令
  5. Javascript阻止表单提交
  6. redis cluster管理工具redis-trib.rb详解
  7. web开发应届生入职_我如何从全职妈妈着手完成第一份Web开发人员工作
  8. [linux]Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more mirrors to try.
  9. Android之PreferenceActivity (转载)
  10. JavaScript之继承和prototype
  11. 机器学习 深度学习 ai_什么是AI? 从机器学习到决策自动化
  12. foobar2000 for mac(多功能音频播放器)
  13. LMS自适应滤波的MATLAB实现——实例仿真
  14. 为啥扫描服务器端口无响应,服务器端口扫描工具
  15. 浅谈打开网页速度慢的原因和解决方法
  16. elementUI表格合并行数据
  17. 斗战神单机版正在连接服务器,斗战神登录卡在这里,又不提示登录失败或者连接超时什......
  18. 动态代理及JDK动态代理源码分析
  19. toString方法和String方法
  20. auto.js实现淘宝快速提交订单

热门文章

  1. 多线程编程之一——问题提出
  2. php实现商品购物车添加功能,PHP实现添加购物车功能
  3. 数据结构与算法(C++)– 栈(Stack)
  4. C指针原理(42)-内存管理与控制
  5. C指针原理(12)-C指针基础
  6. 当深度学习遇上图: 图神经网络的兴起!(文末送书)
  7. 【NLP】图解GPT-2(完整版)
  8. 为什么越来越多的程序员开始学机器学习?揭秘一个重要原因
  9. 分享10个强大的神器工具,你一定会需要!
  10. LeNet试验(五)观察“彩票假说”现象