opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头)

这篇具有很好参考价值的文章主要介绍了opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频信号(以下简称为视频)是非常重要的视觉信息来源,它是视觉处理过程中经常要处理的一类信号。实际上,视频是由一系列图像构成的,这一系列图像被称为帧,帧是以固定的时间间隔从视频中获取的。获取(播放)帧的速度称为帧速率,其单位通常使用“帧/秒”表示,代表在1 秒内所出现的帧数,对应的英文是 FPS(Frames Per Second)。如果从视频中提取出独立的帧,就可以使用图像处理的方法对其进行处理,达到处理视频的目的。

OpenCV 提供了 cv2.VideoCapture 类和 cv2.VideoWriter 类来支持各种类型的视频文件。在不同的操作系统中,它们支持的文件类型可能有所不同,但是在各种操作系统中均支持 AVI格式的视频文件。

VideoCapture 类

OpenCV 提供了 cv2.VideoCapture 类来处理视频。cv2.VideoCapture 类处理视频的方式非常简单、快捷,而且它既能处理视频文件又能处理摄像头信息。

类函数介绍

cv2.VideoCapture 类的常用函数包括初始化、打开、帧捕获、释放、属性设置等,下面对
这些函数进行简单的介绍。

1. 初始化
OpenCV 为 cv2.VideoCapture 类提供了构造函数 cv2.VideoCapture(),用于打开摄像头并完成摄像头的初始化工作。该函数的语法格式为:

捕获对象=cv2.VideoCapture(“摄像头 ID 号”)

式中:

  • “摄像头 ID 号”就是摄像头的 ID 号码。需要注意的是,这个参数是摄像设备(摄像头)的 ID 编号,而不是文件名。其默认值为-1,表示随机选取一个摄像头;如果有多个摄像头,则用数字“0”表示第 1 个摄像头,用数字“1”表示第 2 个摄像头,以此类推。
    所以,如果只有一个摄像头,既可以使用“0”,也可以使用“-1”作为摄像头 ID 号。在某些平台上,如果该参数值为“-1”,OpenCV 会弹出一个窗口,让用户手动选择希望使用的摄像头。

  • “捕获对象”为返回值,是 cv2.VideoCapture 类的对象。
    例如,要初始化当前的摄像头,可以使用语句:

cap = cv2.VideoCapture(0)

OpenCV 官网在介绍函数 cv2.VideoCapture()时,特别强调:视频处理完以后,要记得释放摄像头对象。
该(构造)函数也能够用于初始化视频文件,初始化视频文件时,参数为文件名。此时函数的形式为:

捕获对象=cv2.VideoCapture(“文件名”)

例如,打开当前目录下文件名为“vtest.avi”的视频文件,可以使用语句:

cap = cv2.VideoCapture('vtest.avi')
  1. cv2.VideoCapture.open()函数和cv2.VideoCapture.isOpened()函数

一般情况下,使用 cv2.VideoCapture()函数即可完成摄像头的初始化。有时,为了防止初始化发生错误,可以使用函数 cv2.VideoCapture.isOpened()来检查初始化是否成功。该函数的语法格式为:

retval = cv2.VideoCapture.isOpened()

该函数会判断当前的摄像头是否初始化成功:

  • 如果成功,则返回值 retval 为 True。
  • 如果不成功,则返回值 retval 为 False。

如果摄像头初始化失败,可以使用函数 cv2.VideoCapture.open()打开摄像头。该函数的语法格式为:

retval = cv2.VideoCapture.open( index )

式中:

  • index 为摄像头 ID 号。
  • retval 为返回值,当摄像头(或者视频文件)被成功打开时,返回值为 True。

同样,函数 cv2.VideoCapture.isOpened()和函数 cv2.VideoCapture.open()也能用于处理视频文件。在处理视频文件时,函数 cv2.VideoCapture.open()的参数为文件名,其语法格式为:

retval = cv2.VideoCapture.open( filename )

3. 捕获帧

摄像头初始化成功后,就可以从摄像头中捕获帧信息了。捕获帧所使用的是函数cv2.VideoCapture.read()。该函数的语法是:

retval, image=cv2.VideoCapture.read()

式中:

  • image 是返回的捕获到的帧,如果没有帧被捕获,则该值为空。
  • retval 表示捕获是否成功,如果成功则该值为 True,不成功则为 False。

4. 释放
在不需要摄像头时,要关闭摄像头。关闭摄像头使用的是函数

cv2.VideoCapture.release()。

该函数的语法是:

None=cv2.VideoCapture.release()

例如,当前有一个 VideoCapture 类的对象 cap,要将其释放,可以使用语句:

cap.release()

5 属性设置
有时,我们需要获取 cv2.VideoCapture 类对象的属性,或是更改该类对象的属性。函数cv2.VideoCapture.get()用于获取 cv2.VideoCapture 类对象的属性,该函数的语法格式是:

retval = cv2.VideoCapture.get( propId )

式中,参数 propId 对应着 cv2.VideoCapture 类对象的属性。
例如,有一个 cv2.VideoCapture 类对象 cvc,则:

  • 通过 cvc.get(cv2.CAP_PROP_FRAME_WIDTH),就能获取当前帧对象的宽度。
  • 通过 cvc.get(cv2.CAP_PROP_FRAME_HEIGHT),就能获取当前帧对象的高度。

函数 cv2.VideoCapture.set()用来设置 cv2.VideoCapture 类对象的属性。该函数的语法是:

retval = cv2.VideoCapture.set( propId, value )

式中,propId 对应 cv2.VideoCapture 类对象的属性,value 对应属性 propid 的值。
例如,有一个 cv2.VideoCapture 类对象 cvc,则:

  • 语句 ret = cvc.set(cv2.CAP_PROP_FRAME_WIDTH, 640)将当前帧对象的宽度设置为
    640 像素。
  • 语句 ret = cvc.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)将当前帧对象的高度设置为480 像素。

cv2.VideoCapture 类对象的属性值及含义如表 18-1 所示。

opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头),opencv,音视频,电脑,人工智能,计算机视觉,python
opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头),opencv,音视频,电脑,人工智能,计算机视觉,python

5. cv2.VideoCapture.grab()函数cv2.VideoCapture.retrieve()函数

一般情况下,如果需要读取一个摄像头的视频数据,最简便的方法就是使用函数
cv2.VideoCapture.read()。但是,如果需要同步一组或一个多头(multihead)摄像头(例如立体摄像头或 Kinect)的视频数据时,该函数就无法胜任了。可以把函数 cv2.VideoCapture.read()
理解为是由函数 cv2.VideoCapture.grab()和函数 cv2.VideoCapture.retrieve()组成的。函数
cv2.VideoCapture.grab()用来指向下一帧,函数 cv2.VideoCapture.retrieve()用来解码并返回一帧。

因此,可以使用函数 cv2.VideoCapture.grab()和函数cv2.VideoCapture.retrieve()获取多个摄像头的数据。

函数 cv2.VideoCapture.grab()用来指向下一帧,其语法格式是:

retval= cv2.VideoCapture.grab( )

如果该函数成功指向下一帧,则返回值 retval 为 True。
函数 cv2.VideoCapture.retrieve()用来解码,并返回函数 v2.VideoCapture.grab()捕获的视频帧。

该函数的语法格式为:

retval, image = cv2.VideoCapture.retrieve( )

式中:

  • image 为返回的视频帧,如果未成功,则返回一个空图像。
  • retval 为布尔型值,若未成功,返回 False;否则,返回 True。

对于一组摄像头,可以使用如下代码捕获不同摄像头的视频帧:

success0 = cameraCapture0.grab()
success1 = cameraCapture1.grab()
if success0 and success1:
frame0 = cameraCapture0.retrieve()
frame1 = cameraCapture1.retrieve()
与 VideoCapture 类内的其他函数一样,cv2.VideoCapture.grab()和 cv2.VideoCapture.retrieve()

也能用来读取视频文件。文章来源地址https://www.toymoban.com/news/detail-654423.html

示例:显示帅哥或美女视频

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
 ret, frame = cap.read()
 cv2.imshow('frame',frame)
 c = cv2.waitKey(1)
 if c==27: #ESC 键
    break
cap.release()
cv2.destroyAllWindows()

到了这里,关于opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv进阶08-K 均值聚类cv2.kmeans()介绍及示例

    K均值聚类是一种常用的无监督学习算法,用于将一组数据点分成不同的簇(clusters),以便数据点在同一簇内更相似,而不同簇之间差异较大。K均值聚类的目标是通过最小化数据点与所属簇中心之间的距离来形成簇。 当我们要预测的是一个离散值时,做的工作就是“分类”

    2024年02月12日
    浏览(28)
  • opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()

    人脸识别是指程序对输入的人脸图像进行判断,并识别出其对应的人的过程。人脸识别程 序像我们人类一样,“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然,要实现人脸识别,首先要判断当前图像内是否出现了人脸,也即人脸检测。只有检 测到图像

    2024年02月09日
    浏览(28)
  • Python-OpenCv中的cv2.VideoCapture()类

    cv2.VideoCapture()具有两个功能,一是可以完成摄像头的初始化,打开摄像头;二是可以完成视频文件的初始化。 参数说明:         capture :要打开的摄像头         index :摄像头的设备索引,对于笔记本电脑来说,为0时,一般打开的是电脑的内置摄像头,为1时,打开的为外

    2024年01月25日
    浏览(25)
  • cv2.VideoCapture 及 ffmpeg 打开视频流

    安装ffmpeg: windows电脑FFmpeg安装教程手把手详解   安装ffmpeg 运行ffmpeg:

    2024年02月12日
    浏览(30)
  • opencv进阶07-支持向量机cv2.ml.SVM_create()简介及示例

    支持向量机(Support Vector Machine,SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)对样本数据进行分割,分割的原则是确保分类最优化(类别之间的间隔最大)。当数据集较小时,使用支持向量机进行分类非常有效。支持向量机是最好的现成分类器之一,这里所谓

    2024年02月12日
    浏览(24)
  • cv2.videocapture.read()参数

    cv2.videocapture.read()是OpenCV库中读取视频文件的函数,其参数为一个可选的参数,用于指定读取视频文件时的参数。该参数是一个整数类型的值,可以为以下值之一: 0: 默认参数,表示从第一个可用的摄像头中读取视频流。 1: 表示从第二个可用的摄像头中读取视频流。 字符串

    2024年02月16日
    浏览(26)
  • OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture

    OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture 出现这种情况基本是因为: VideoCapture 读取视频路径错误。 比如:在这里我电脑不知道为什么默认摄像头是1不是0,所以视频读取错误,我改为 VideoCapture cap(1)就对了。 同理,如果调用的不是

    2024年01月23日
    浏览(31)
  • cv2.VideoCapture拉取rtsp流超时问题

    在python中,使用cv2拉去rtsp视频流时,如果rtsp流异常,不管是cv2.VideoCapture()或者VideoCapture().read()都可能长时间阻塞(很多人说默认超时30s),而且找不到设置超时设定的地方,尝试过使用线程处理,但实际使用比较玛法麻烦,在stackoverflow.找到解决方法:

    2024年02月16日
    浏览(27)
  • 【Python】进阶学习:OpenCV--一文详解cv2.namedWindow()

    【Python】进阶学习:OpenCV–一文详解cv2.namedWindow() 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、

    2024年03月20日
    浏览(39)
  • opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

    在 OpenCV 中,可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是: image=cv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] ) 其中,函数的返回值为 image,表示目标图像,即绘制了边缘的原始图像。 该函数有如下参数: image:待

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包