先直接上示例代码,然后对代码进行讲解。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
# 图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
# OpenCV的版本为4.1# -*- coding:utf-8 -*-
import cv2 as cvif __name__ == '__main__':video = cv.VideoCapture('./videos/tea.mp4')if video.isOpened():print('视频读取成功\n')# 输出相关信息print('视频中图像的宽度为:{}'.format(video.get(cv.CAP_PROP_FRAME_WIDTH)))print('视频中图像的高度为:{}'.format(video.get(cv.CAP_PROP_FRAME_HEIGHT)))print('视频帧率为:{}'.format(video.get(cv.CAP_PROP_FPS)))print('视频总帧数为:{}'.format(video.get(cv.CAP_PROP_FRAME_COUNT)))else:print('视频读取失败\n')# 如果视频读取成功则创建视频流while video.isOpened():ret, frame = video.read()if ret is True:cv.imshow('Tea', frame)# 设置视频播放速度# 下面这行代码用于控制播放速度cv.waitKey(int(1000 / video.get(cv.CAP_PROP_FPS)))# 按下q退出if cv.waitKey(1) & 0xFF == ord('q'):breakelse:break# 释放并关闭窗口video.release()cv.destroyAllWindows()

运行结果截图如下:

代码中用到的视频的下载链接如下:
链接:https://pan.baidu.com/s/1SZk7osETBYcqH9IkGcrpAQ
提取码:uutz

先说代码

video = cv.VideoCapture('./videos/tea.mp4')

这行代码用于打开视频文件“tea.mp4”,代码中的VideoCapture类就是这篇博文要讲的核心类。
它的构造函数原型有三种,分别如下:
C++原型如下:

cv::VideoCapture::VideoCapture   ()
cv::VideoCapture::VideoCapture  (const String & filename,int apiPreference = CAP_ANY )
cv::VideoCapture::VideoCapture  (int index,int apiPreference = CAP_ANY )

Pytyhon原型如下:

<VideoCapture object>  =  cv.VideoCapture()
<VideoCapture object> =  cv.VideoCapture(filename[, apiPreference]   )
<VideoCapture object> =  cv.VideoCapture(index[, apiPreference]  )

第一种原型是无参数的;
第二种原型用于打开视频文件;
第三种原型用于打开摄像头;
第二种原型第三种原型的参数apiPreference用于为这个类指定视频和摄像头的打开方法。
其可选值及意义的官方文档链接如下:
https://docs.opencv.org/4.1.2/d4/d15/group__videoio__flags__base.html#ga023786be1ee68a9105bf2e48c700294d
CAP_ANY
Python: cv.CAP_ANY
Auto detect == 0.
选值这个参数则自动选择视频文件的Capture处理方式。

CAP_VFW
Python: cv.CAP_VFW
Video For Windows (obsolete, removed)
Capture时按Windows视频文件处理(已经淘汰废除的参数取值)

CAP_V4L
Python: cv.CAP_V4L
V4L/V4L2 capturing support.V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。

CAP_V4L2
Python: cv.CAP_V4L2
和CAP_V4L 的意义一样。

CAP_FIREWIRE
Python: cv.CAP_FIREWIRE
IEEE 1394 drivers. 支持IEEE1394接口capture视频。IEEE1394接口是苹果公司开发的串行标准,又称火线接口(firewire)。IEEE1394支持外设热插拔,可为外设提供电源,省去了外设自带的电源,能连接多个不同设备,支持同步数据传输

CAP_FIREWARE
Python: cv.CAP_FIREWARE
和CAP_FIREWIRE 的意义一样。

CAP_IEEE1394
Python: cv.CAP_IEEE1394
和CAP_FIREWIRE 的意义一样。

CAP_DC1394
Python: cv.CAP_DC1394
和CAP_FIREWIRE 的意义一样。

CAP_CMU1394
Python: cv.CAP_CMU1394
和CAP_FIREWIRE 的意义一样。

CAP_QT
Python: cv.CAP_QT
QuickTime (obsolete, removed)— QuickTime是苹果公司开发的多媒体技术架构。不过这是已经淘汰废除的参数取值。

CAP_UNICAP
Python: cv.CAP_UNICAP
Unicap drivers (obsolete, removed) —这也是一个已经淘汰废除的参数取值,具体Unicap drivers是个什么东西,笔者也不知道。有知道的朋友麻烦在下面回复一下!

CAP_DSHOW
Python: cv.CAP_DSHOW
DirectShow (via videoInput) —直接以输入视频为输出

CAP_PVAPI
Python: cv.CAP_PVAPI
PvAPI, Prosilica GigE SDK.—Prosilica是一家加拿大的公司,是工业相机世界领导者,GigE是他制定的。GigE用来实现在机器视觉领域利用千兆以太网接口进行图像的高速传输。所以这个参数的意义是按工业相机GigE的标准获取视频。

CAP_OPENNI
Python: cv.CAP_OPENNI
OpenNI (for Kinect)—OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。OpenNI的主要目的是要形成一个标准的API,来搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁。Kinect是微软在2009年6月2日的E3大展上,正式公布的XBOX360体感周边外设。

CAP_OPENNI2
Python: cv.CAP_OPENNI2
OpenNI2 (for Kinect)—明白了上面CAP_OPENNI 的意义,就应该明白这个的意义了,所以就不多说了。

CAP_OPENNI_ASUS
Python: cv.CAP_OPENNI_ASUS
OpenNI (for Asus Xtion)—OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。OpenNI的主要目的是要形成一个标准的API,来搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁。Asus Xtion是华硕公司的深度感知摄像头及其相关技术。

CAP_OPENNI2_ASUS
Python: cv.CAP_OPENNI2_ASUS
OpenNI2 (for Asus Xtion and Occipital Structure sensors)—同样,明白了CAP_OPENNI_ASUS 的意义,就知道了这个的意义,也就不多说了。

CAP_ANDROID
Python: cv.CAP_ANDROID
Android - not used.—为安卓系统保留的参数,目前未启用。

CAP_XIAPI
Python: cv.CAP_XIAPI
XIMEA Camera API. XIMEA 是德国的一家公司,专业生成工业相机。

CAP_AVFOUNDATION
Python: cv.CAP_AVFOUNDATION
AVFoundation framework for iOS (OS X Lion will have the same API)—AVFoundation是苹果在iOS和OS X系统中用于处理基于时间的媒体数据的框架。

CAP_GIGANETIX
Python: cv.CAP_GIGANETIX
Smartek Giganetix GigEVisionSDK—Smartek是一家生产工业相机的德国公司,Giganetix是其生产的一种工业相机的名称,GigEVisionSDK是这款工业相机的SDK。

CAP_MSMF
Python: cv.CAP_MSMF
Microsoft Media Foundation (via videoInput) —Microsoft Media Foundation是微软公司的新一代多媒体开发平台,用以取代原来的Directshow,为了满足现在多媒体播放的高清晰,高品质,颜色管理,以及充分利用硬件加速等功能而建立的新一代开发平台。

CAP_WINRT
Python: cv.CAP_WINRT
Microsoft Windows Runtime using Media Foundation.—微软实时窗口,技术基础是Microsoft Media Foundation 。

CAP_INTELPERC
Python: cv.CAP_INTELPERC
RealSense (former Intel Perceptual Computing SDK)—Intel公司的RealSense深度摄像头产品,就是之前的英特尔感知计算SDK。

CAP_REALSENSE
Python: cv.CAP_REALSENSE
Synonym for CAP_INTELPERC. —和 CAP_INTELPERC的意义一样。

CAP_GPHOTO2
Python: cv.CAP_GPHOTO2
gPhoto2 connection— gPhoto2是一个免费软件,提供了在类Unix系统上通过终端来控制数码相机的功能。

CAP_GSTREAMER
Python: cv.CAP_GSTREAMER
GStreamer.—Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。

CAP_FFMPEG
Python: cv.CAP_FFMPEG
Open and record video file or stream using the FFMPEG library.
使用FFMPEG library找开视频文伯或记录视频流。

CAP_IMAGES
Python: cv.CAP_IMAGES
OpenCV Image Sequence (e.g. img_%02d.jpg) 打开OpenCV的序列图像。

CAP_ARAVIS
Python: cv.CAP_ARAVIS
Aravis SDK.—Aravis视觉平台是一款是基于Glib/Gobject的库,用于使用工业摄像机进行视频采集。目前,它实现了工业相机使用的千兆以太网和USB3.0协议。它还提供了基本的以太网摄像机模拟器和简单的视频查看器。用户可以通过我们现在常用的Linux操作系统来实现对于工业相机的操作。

CAP_OPENCV_MJPEG
Python: cv.CAP_OPENCV_MJPEG
Built-in OpenCV MotionJPEG codec. 给OpenCV嵌入MotionJPEG编解码器

CAP_INTEL_MFX
Python: cv.CAP_INTEL_MFX
Intel MediaSDK.—英特尔媒体SDK

CAP_XINE
Python: cv.CAP_XINE
XINE engine (Linux)—XINE engine是什么鬼?笔者也不知道,有知道的朋友留言吧!

继续看代码,下面说代码:

cv.waitKey(int(1000 / video.get(cv.CAP_PROP_FPS)))

这行代码运于控制图片的切换速度,从而实现按视频的正常速度播放图片!具体是怎么实现的,我们来仔细分析一下。video.get(cv.CAP_PROP_FPS)获取到的是咱们的视频文件是每秒多少帧,那么帧与帧的间隔时间是多少呢?就是1/video.get(cv.CAP_PROP_FPS),这个值的单位是秒,而我们的waitKey()函数是以毫秒为单位的,所以还需要乘上1000。另又由于waitKey()要求的参数为int类型,所以再强制类型转换一下,也就成了上面代码中的“int(1000 / video.get(cv.CAP_PROP_FPS))”

继续看代码,下面说代码:

            if cv.waitKey(1) & 0xFF == ord('q'):break

这句代码的作用是如果按下Q键则退出~具体是怎么实现这个效果的,看了下面这篇文章大家应该就会非常清楚了:
https://blog.csdn.net/hao5119266/article/details/104173400
上面这篇博文介绍了函数waitKey()的详情,还介绍了为什么要将其返回结果与0xFF相与后再与按键的Unicode码相比较,看是否相同。
值得注意的是上面链接的博文中说的是“按键的ASCII码”,而代码中ord()函数返回的是Unicode码,对于这个问题,要知道这样一个知识点,即“UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO这个国际标准化组织 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位”。所以对于英文字符而言,其UNICODE码和ASCII码实际上是相同的。

看懂上面的代码用类VideoCapture加载视频相信大家就没问题了,至于怎么打开摄像头,也是用这个类,只是用其第三种原型,这里再把其原型粘贴如下:
它的构造函数原型有三种,分别如下:
C++原型如下:

cv::VideoCapture::VideoCapture   ()
cv::VideoCapture::VideoCapture  (const String & filename,int apiPreference = CAP_ANY )
cv::VideoCapture::VideoCapture  (int index,int apiPreference = CAP_ANY )

Pytyhon原型如下:

<VideoCapture object>  =  cv.VideoCapture()
<VideoCapture object> =  cv.VideoCapture(filename[, apiPreference]   )
<VideoCapture object> =  cv.VideoCapture(index[, apiPreference]  )

要打开摄像头时,用第三种原型,参数index表示摄像头的索引号,如果填0则表示使用计算机的默认摄像头,参数apiPreference和第二种原型中的参数apiPreference意义是一样的。

OpenCV中使用类VideoCapture加载视频和打开摄像头相关推荐

  1. 查看was中项目类的加载顺序

    https://blog.csdn.net/zhouyong0/article/details/7970557 查看was中项目类的加载顺序

  2. java 根据类名示例化类_如何使用示例从Java中的类路径加载资源

    java 根据类名示例化类 Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为Input ...

  3. 如何使用示例从Java中的类路径加载资源

    Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为InputStream或URL. 假设 ...

  4. java反射类带构造函数_java中反射类的加载和构造函数

    我们先创建了一个Person类 package reflect; public class Person { public String name = "zhangsan"; pu ...

  5. JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制

    一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...

  6. 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析

    前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...

  7. 透过现象看本质:Java类动态加载和热替换

    摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...

  8. 类的加载过程详解:加载、验证、准备、解析、初始化

    想要弄明白的知识点: 类加载的过程,加载.验证.准备.解析.初始化.每个部分详细描述. 加载阶段读入.class文件,class文件时二进制吗,为什么需要使用二进制的方式? 验证过程是防止什么问题?验 ...

  9. JVM中篇:字节码与类的加载篇

    0.概述 0.1字节码文件的跨平台性 0.1.1.Java语言:跨平台的语言(write once,run anywhere) 当]ava源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再 ...

最新文章

  1. 自动调节图像的对比度 和改变图像的大小
  2. 成功解决ERROR: Unable to find the development tool `make` in your path; please make sure that you have t
  3. 机器学习之tensorflow出现的一些问题
  4. 使用SaxParser和完整代码进行XML解析
  5. 经典案例获取数组里的对象是否匹配
  6. 我的docker随笔32:sftp服务部署
  7. linux系统pdf目录编辑器,Linux操作系统(三)编辑器与实用程序.pdf
  8. Matlab信号提取、频谱分析、滤波、阈值设定、寻找极值点
  9. ICH E2B | ICSR 电子传输网关对接解决方案(CDE EDI)
  10. 于佳宁担任BCF理事
  11. WEB渗透测试之三大漏扫神器
  12. 面试题(4)Oracle
  13. Jquery(四)对象遍历及特效
  14. 9-2 time类的加工
  15. 第二部分 区块链的应用
  16. 店铺运营咨询师认证考试
  17. php100 2012视频教程 汽车维修 C#高级编程视频教程 服装设计 时尚类视频教程分享 持续更新中~~
  18. git bash 同项目多仓库推送备份
  19. 微信小程序之性别单选效果
  20. 微信小程序-实现扫码自动连接wifi(android)

热门文章

  1. python与excel做数据可视化-python操作Excel、读取CVS与数据可视化
  2. mac中python怎么打开中文txt文件-mac在matplotlib中显示中文的操作方法
  3. 看漫画学python电子书-看漫画学Python(有趣有料好玩好用全彩版)
  4. python与excel表格-超简单:用Python让Excel飞起来
  5. python怎么输入代码-如何编写python代码
  6. python语言学了有用吗-转行学习Python开发有什么优势
  7. python操作excel表格-python如何操作excel表格
  8. python主要用途-python的主要用途是什么
  9. python能做软件开发吗-学习Python软件开发能做什么?
  10. python难学嘛-python语言难学吗