Videocapture类使用介绍

opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头) cv2.VideoCapture 类的常用函数包括初始化、打开、帧捕获、释放、属性设置等,下面对这些函数进行简单的介绍。1. 初始化OpenCV 为 cv2.VideoCapture 类提供了构造函数,用于打开摄像头并完成摄像头的初始化工作。该函数的语法格式为:捕获对象=cv2.VideoCapture(“摄像头 ID 号”)式中:“摄像头 ID 号”就是摄像头的 ID 号码。需要注意的是,这个参数是摄像设备(摄像头)的 ID 编号,而不是文件名。其默认值为-1,表示随机选取一个摄像头; 阅读详情
AI摘要

本文详细介绍OpenCV中VideoCapture类的使用方法,包括如何通过构造函数和open方法打开视频文件或摄像头,如何使用isOpened判断是否成功打开,如何通过read、grab、retrieve等方法读取视频帧,以及如何设置和获取视频属性。

opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API。

1.VideoCapture类的构造函数:

C++: VideoCapture::VideoCapture()
C++: VideoCapture::VideoCapture(const string& filename)

C++: VideoCapture::VideoCapture(int device)

功能:创建一个VideoCapture类的实例,如果传入对应的参数,可以直接打开视频文件或者要调用的摄像头。

参数:
filename – 打开的视频文件名。

device – 打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像头。 


2.VideoCapture::open

功能:打开一个视频文件或者打开一个捕获视频的设备(也就是摄像头)

C++: bool VideoCapture::open(const string& filename)
C++: bool VideoCapture::open(int device)
参数:
filename – 打开的视频文件名。

device – 打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像头。

    通过对VideoCapture类的构造函数和open函数分析,可以发现opencv读入视频的方法一般有如下两种。比如读取当前目录下名为"dog.avi"的视频文件,那么这两种写法分别如下。

(1)先实例化再初始化:

VideoCapture capture;

capture.open("dog.avi");

(2)在实例化的同时进行初始化:

VideoCapture("dog.avi");


3.VideoCapture::isOpened
C++: bool VideoCapture::isOpened()
功能:判断视频读取或者摄像头调用是否成功,成功则返回true。


4.VideoCapture::release

C++: void VideoCapture::release()
功能:关闭视频文件或者摄像头。

5.VideoCapture::grab
C++: bool VideoCapture::grab()
功能:从视频文件或捕获设备中抓取下一个帧,假如调用成功返回true。(细节请参考opencv文档说明)


6.VideoCapture::retrieve
C++: bool VideoCapture::retrieve(Mat& image, int channel=0)
功能:解码并且返回刚刚抓取的视频帧,假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false。

7.VideoCapture::read

C++: VideoCapture& VideoCapture::operator>>(Mat& image)
C++: bool VideoCapture::read(Mat& image)

功能:该函数结合VideoCapture::grab()和VideoCapture::retrieve()其中之一被调用,用于捕获、解码和返回下一个视频帧这是一个最方便的函数对于读取视频文件或者捕获数据从解码和返回刚刚捕获的帧,假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false。


    从上面的API中我们会发现获取视频帧可以有多种方法 :

// 方法一 
capture.read(frame); 

// 方法二 
capture.grab(); 

// 方法三
capture.retrieve(frame); 

// 方法四

capture >> frame;


8.VideoCapture::get

C++: double VideoCapture::get(int propId)

功能:一个视频有很多属性,比如:帧率、总帧数、尺寸、格式等,VideoCapture的get方法可以获取这些属性。

参数:属性的ID。

属性的ID可以是下面的之一:

CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds or video capture timestamp.
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film.
CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
CV_CAP_PROP_FPS Frame rate.
CV_CAP_PROP_FOURCC 4-character code of codec.
CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
CV_CAP_PROP_HUE Hue of the image (only for cameras).
CV_CAP_PROP_GAIN Gain of the image (only for cameras).
CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
CV_CAP_PROP_WHITE_BALANCE Currently not supported
CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)
Note: 如果查询的视频属性是VideoCapture类不支持的,将会返回0。


9.VideoCapture::set
C++: bool VideoCapture::set(int propertyId, double value)

功能:设置VideoCapture类的属性,设置成功返回ture,失败返回false。

参数:第一个是属性ID,第二个是该属性要设置的值。
属性ID如下:
CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film.
CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
CV_CAP_PROP_FPS Frame rate.
CV_CAP_PROP_FOURCC 4-character code of codec.
CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
CV_CAP_PROP_HUE Hue of the image (only for cameras).
CV_CAP_PROP_GAIN Gain of the image (only for cameras).
CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
CV_CAP_PROP_WHITE_BALANCE Currently unsupported
CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)
    

    至此,视频捕获类VideoCapture的API介绍完了,下面是一个应用示例:

#include <iostream>


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc,char* argv[])

{
    cv::VideoCapture capture(argv[1]);
    if(!capture.isOpened())

    {
        std::cout<<"video not open."<<std::endl;
        return 1;
    }
    //获取当前视频帧率
    double rate = capture.get(CV_CAP_PROP_FPS);
    //当前视频帧
    cv::Mat frame;
    //每一帧之间的延时
    //与视频的帧率相对应
    int delay = 1000/rate;
    bool stop(false);
    while(!stop)

    {
        if(!capture.read(frame))

        {
            std::cout<<"no video frame"<<std::endl;
            break;
         }

        //此处为添加对视频的每一帧的操作方法
        int frame_num = capture.get(CV_CAP_PROP_POS_FRAMES);
        std::cout<<"Frame Num : "<<frame_num<<std::endl;
        if(frame_num==20)

        {
            capture.set(CV_CAP_PROP_POS_FRAMES,10);
        }

        cv::imshow("video",frame);
        //引入延时
        //也可通过按键停止
        if(cv::waitKey(delay)>0)
        stop = true;
    }


    //关闭视频,手动调用析构函数(非必须)
    capture.release();
    return 0;
}

OpenCV的VideoCapture类的get、set参数列表 首先先看OpenCV4.1官方中文手册P32,关于VideoCapture的set和get的说明,如图1所示。说明了19个参数都是可读的,但部分参数可写。具体关于它们的读写我没有仔细深究,在表1注出了我所知的它们读写属性。 图1 表1 get的参数列表 参数名称 值 说明 读/写 CV.CAP_PROP_POS_MSEC 0 当前视频文件的时间位置(返回毫秒)或视频捕获时间戳 Y/ CV.CAP_PROP_POS_FRAMES 1 从0开. 阅读详情

相关推荐

VideoCapture类

VideoCapture类是OpenCV中从视频文件或摄像头中提取图像帧,获得视频相关属性的一个类;下面详细介绍下这个类及其使用方法。 VideoCapture类的构造函数: // 这个是默认构造函数 VideoCapture::VideoCapture() // 这个构造函数用来处理视频文件,参数为视频文件名 VideoCapture::VideoCapture(const string&

youmy1111的专栏 1755

opencv视频操作基础---VideoCapture类

    opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API。1.VideoCapture类的构造函数:C++: VideoCapture::VideoCapture(); C++: VideoCapture::VideoCapture(const string&amp; filename); C++: VideoCapture::VideoCaptur...

洪流之源 11万+

OpenCV库成员——VideoCapture类和VideoWriter类

前面已经提到过一部分的视频读写:OpenCV–012:视频读写 OpenCV视频I/O概述 OpenCV视频I/O模块是一组用于读取和写入视频或图像序列的类和功能。 基本上,该模块将cv :: VideoCapture和cv :: VideoWriter类作为2层接口提供给许多用作后端的视频I / O API。 某些后端,例如(DSHOW)Direct Show,Windows视频(VFW)...

WaitFoF 4409

opencv学习---VideoCapture 类基础知识

以下是对两位大神的博客进行简单整理得到:http://blog.youkuaiyun.com/weicao1990/article/details/53379881 http://blog.youkuaiyun.com/guduruyu/article/details/68486063 便于为需要的同学解惑,便于自己以后复习!            在opencv中关于视频的读操作是通过

hairuiJY 10万+

【OpenCV】VideoCapture类解析

Backto OpenCV Index VideoCaputre 是OpenCV 中用来从摄像头或视频文件或图像序列 来 获取/处理视频的类. Class for video capturing from video files, image sequences or cameras. The class provides C++ API for capturing video from c...

北境の守望者 2568

videocap摄像头录像软件

这是一款非常实用而且体积小的录制软件,可以通过PC的摄像头 移动摄像设备 USB摄像头等进行抓拍,还有报警功能!

Videocapture类原理及示例

程序功能: 1.用户可以选择连续播放视频,输出一帧后用户再来决定下一帧如何播放(单帧模式),退出 2.同时支持用户设定下拉框显示确切位置的图像帧 存在问题: 控制台无法获取输入 下滑条回调函数理解不全面 读取视频流的videoCapture类功能没有完全理解,等我学过之后来补充。。。 #include &lt;opencv2/opencv.hpp&gt; #include&lt;iostream...

m0_37937932的博客 3012

PROFINET非周期数据通信实战:从报文解析到参数读写

本文详细解析了PROFINET非周期数据通信的实战应用,从报文结构到参数读写全流程。通过西门子PLC与驱动器的配置案例,深入讲解非周期通信在工业自动化中的关键作用,包括硬件选型、软件配置及常见问题排查,帮助工程师高效实现设备参数配置与诊断。

weixin_42522953的博客 513

opencv学习之VideoCapture类

/apturing video from cameras or for reading video files and image sequences. Here is how the class can be used: : VideoCapture类主要用于从相机中、视频文件中、相片序列中读取单帧图像。具体用法如下 @code #include "opencv2/opencv.hpp"

Chailiren的博客 1213

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4591

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

opencv对视频进行人脸识别--使用videoCapture类

文章目录前言一、libfacedetection的配置及基本介绍:二、VideoCapture类:1、构造函数类型:2.1.1、VideoCapture();2.1.2、VideoCapture(const String& filename, int apiPreference = CAP_ANY);2.1.3、VideoCapture(int index, int apiPreference = CAP_ANY);2、构造函数具体定义:三、VideoCapture类的函数:1、open();函数3

ivan_9的博客 5698

YOLO26中的PPM空间金字塔池化:改良设计与多尺度特征提取教程

在计算机视觉的语义分割任务中,准确理解图像中的上下文信息至关重要。例如,在街景图像中,可能同时存在远处的小汽车和近处的大建筑物,网络需要具备捕获多尺度上下文信息的能力。例如,要正确识别图像中的"船",不仅需要看到船本身的特征,还需要理解周围的水面环境。金字塔的每一层对应不同的池化尺度,从细粒度到粗粒度,形成了多层次的特征表示。PPM(Pyramid Pooling Module)正是为了解决这一问题而提出的模块,它通过构建金字塔形状的池化结构,有效地聚合不同尺度的上下文信息,从而提升语义分割的精度。

LXY_LOVE36的博客 82

OpenCV中VideoCapture类的使用详解

OpenCV中从视频文件或摄像机中捕获视频的类是VideoCapture。该类提供 C++ API 用于从摄像机捕获视频或读取视频文件。 关于视频的读操作是通过VideoCapture类来完成的;视频的写操作是通过VideoWriter类来实现的。 VideoCapture既支持从视频文件读取,也支持直接从摄像机(比如计算机自带摄像头)中读取。要想获取视频需要先创建一个VideoCapture对象,VideoCapture对象的创建方式有以下三种: 一、创建一个捕获对象,通过成员函数open()来设定打开的

极客园地 1万+

嵌入式Modbus协议面试题及参考答案

Modbus 协议采用主从模式进行通信,这种模式定义明确,便于在工业环境中实现设备之间的有序数据交互。在主从模式中,存在一个主站(Master)和多个从站(Slave)。主站通常是工业控制系统中的上位机,如 PLC、工控机等,它负责发起通信请求,控制整个通信过程。从站则是各种现场设备,如传感器、执行器等,它们接收主站的请求,并根据请求进行相应的操作,然后将结果返回给主站。主站的主要功能包括:发起数据读取或写入请求、控制通信的时序和流程、处理从站返回的数据。

大模型大数据攻城狮的专栏 2042

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

videocapture 保存图片_OpenCV中VideoCapture类的使用详解

主要记录Python-OpenCV中的VideoCapture类的使用;官方文档;VideoCapture()是用于从视频文件、图片序列、摄像头捕获视频的类;#!/usr/bin/env python#-*- coding:utf-8 -*-# @Time : 19-4-21 上午10:31# @Author : chen"""VideoCapture()的使用"""import cv2impor...

weixin_33229152的博客 646

《FreeRTOS 入门与实战》第2章:开发环境搭建(实战)

STM32CubeIDE工程创建与FreeRTOS移植J-Link调试环境搭建SystemView可视化跟踪配置。

2301_79143213的博客 1733

Opencv学习之VideoCapture类

VideoCapture类可以对视频进行读取操作以及调用摄像头,下面是该类的API。1、VideoCapture类的构造函数:C++: VideoCapture::VideoCapture(); C++: VideoCapture::VideoCapture(const string&amp; filename); C++: VideoCapture::VideoCapture(int devic...

xueluowutong的博客 1330

北斗导航 | 基于LSTM-KF融合的北斗卫星定位算法研究框架

针对北斗卫星导航系统在复杂环境下存在的多路径效应、非视距传播等问题,提出一种基于长短期记忆网络(LSTM)与卡尔曼滤波(KF)的组合定位算法。通过LSTM网络建模定位误差的非线性特征,结合卡尔曼滤波实现动态噪声抑制,构建"粗定位-LSTM校正-卡尔曼滤波优化"的三级处理架构。实验表明,融合算法较传统方法定位精度提升42.7%,均方根误差降低至1.2米。

尘世冰封的专栏 920

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【opencv入门】VideoCapture类

今天学习了opencv的摄像头调用,记录一下。 OpenCV中提供了专门操作视频的接口类VideoCapture,VideoCapture类可以从文件或者摄像设备中读取视频,提供常用的三种构造函数如下: c++:VideoCapture:VideoCapture() c++:VideoCapture:VideoCapture(const string& filename) c++:VideoCapture:VideoCapture(int device) 参数说明: 实现视频类构造函数。

StudyWinter的博客 856

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python-OpenCV中VideoCapture类的使用

目录   主要记录Python-OpenCV中的VideoCapture类的使用;官方文档;   VideoCapture()是用于从视频文件、图片序列、摄像头捕获视频的类; #!/usr/bin/env python #-*- coding:utf-8 -*- # @Time : 19-4-21 上午10:31 # @Author :...

weixin_34415923的博客 1713

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

利用OpenCV的VideoCapture类实现视频读操作

利用OpenCV的VideoCapture类实现视频读操作

昊虹AI笔记 7317

Python-OpenCV中VideoCapture类和VideoWriter类的使用

Python-OpenCV中VideoCapture类的使用 Python-OpenCV中的VideoCapture类的官方文档:https://docs.opencv.org/4.0.0/d8/dfe/classcv_1_1VideoCapture.html VideoCapture()是用于从视频文件、图片序列、摄像头捕获视频的类; #!/usr/bin/env python ''' Vide...

selfsongs 7211
上一篇: S32v234 VS2013 demo环境搭建
FroSuccess
博客等级 码龄15年 4粉丝 4原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值