OpenCV基础---视频加载与摄像头调用

一、视频数据的读取

        视频文件是由多张图片组成的,但imread()函数并不能直接读取视频文件,VideoCapture类起到了重要作用。

读取视频文件VideoCapture类构造函数:

cv::VideoCapture::VidoeCapture(); //默认构造函数
cv::VideoCapture::VideoCapture(const String &filename,
                                int apiPreference = CAP_ANY
                                )

filename: 读取视频文件或者图像序列名称。

apiPreference: 读取视频。

        该函数是构造一个能够读取与处理视频文件的视频流。上诉代码中第一行是VideoCapture类的默认构造函数,知识声明了一个能够读取视频数据的类,具体读取什么视频文件,需要在使用是通过open()函数指出。第二种构造函数在给出声明变量的同时也将视频数据赋值给变量。可以读取的视频文件种类包括视频文件(形如video.avi)。与imread()函数一样,构造函数同样可能读取视频文件失败,因此需要通过isOpened()函数进行判断。如果读取成功则返回true,如果读取失败则返回false。

        通过构造函数只是将视频文件加载到了VideoCapture类变量中,当我们在需要使用视频中的图像时,还需要将图像由VideoCapture类变量导出到Mat类变量中,用于后期处理,该操作可以通过“>>”运算符将图像按照视频顺序由VideoCapture类变量赋值给Mat类变量。当VideoCapture类变量中所有的图像都赋值给Mat类变量够,再次赋值的时候Mat类变量会变为空矩阵,因此可以通过empty()判断VideoCapture类变量中是否所有图像都已经读取完毕。

        VideoCapture类变量提供了可以查看视频属性的get()函数,通过输入指定的标志来获取视频属性。

VideoCapture类中get()方法中的标志参数
标志参数简记作用
CAP_PROP_POS_MSEC0视频文件的当前位置(以毫秒为单位)
CAP_PROP_FRAME_WIDTH3视频流中图像的宽度
CAP_PROP_FRAME_HEIGHT4视频流中图像的高度
CAP_PROP_FPS5视频流中图像的频率(每秒帧数)
CAP_PROP_FOURCC6编解码器的4字符代码
CAP_PROP_FRAME_COUNT7视频流中图像帧数
CAP_PROP_FORMAT8返回的Mat对象格式
CAP_PROP_BRIGHTNESS10图像的亮度(仅适用于支持的相机)
CAP_PROP_CONTRAST11图像对比度(仅适用于相机)
CAP_PROP_SATURATION12图像饱和度(仅适用于相机)
CAP_PROP_HUE13图像的色调(仅适用于相机)
CAP_PROP_GAIN14图像的增益(仅适用于支持的相机)
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
    system("color F0")   //更改界面颜色
    VideoCapture video("test.mp4);
    if (video.isOpened())
    {
        cout << "视频中图像的宽度=" << video.get(CAP_PROR_FRAME_WIDTH) << endl;
        cout << "视频中图像的高度=" << video.get(CAP_PROR_FRAME_HEIGHT) << endl;
        cout << "视频帧率=" << video.get(CAP_PROP_FPS) << ednl;
    }
    else
    {
        cout << "请确认视频文件名称是否正确" << endl;
        return -1;
    }
    while(1)
    {
        Mat frame;
        video >> frame;
        if ( frame.empty())
            break;
        imshow("video", frame);
        waitKey(1000 / video.get(CAP_PROP_FPS));
    }
    waitKey(0);
    return 0;
}

二、摄像头的直接调用

        VideoCapture类还可以调用摄像头,构造方式如下:

cv::VideoCapture::VideoCapture(int index,
                                int apiPreference = CAP_ANY
                                )

        与读取视频图像对比,只有第一个参数不同,调用摄像头时,第一个参数为要打开的摄像头设备的ID,ID的命名方式从0开始。从摄像头中国读取图像数据的方式与从视频中读取图像数据的方式相同,通过">>"符号读取当前时刻相机拍摄到的图像。并且,在读取视频时,VideoCapture类具有的属性同样可以使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值