读取视频,读取摄像头

/*此部分为全部转载,只是为了自己学习怕忘记了   出处:https://www.cnblogs.com/little-monkey/p/7162340.html*/

一、介绍

视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的。1秒24帧基本就能流畅的读取视频了。 
①读取视频有两种方法: 
A. VideoCapture cap; 
cap.open(“1.avi”); 
B. VideoCapture cap(“1.avi”);


②循环显示每一帧: 
while(1) 

Mat frame; //定义Mat变量,用来存储每一帧 
cap>>frame; //读取当前帧方法一 
//cap.read(frame); //读取当前帧方法二 
imshow(“视频显示”, frame); //显示一帧画面 
waitKey(30); //延时30ms 
}

二、读取视频示例程序

#include<opencv2/opencv.hpp>
using namespace cv;

void main(){
    VideoCapture cap;
    cap.open("E://2.avi"); //打开视频,以上两句等价于VideoCapture cap("E://2.avi");

    //cap.open("http://www.laganiere.name/bike.avi");//也可以直接从网页中获取图片,前提是网页有视频,以及网速够快
    if(!cap.isOpened())//如果视频不能正常打开则返回
        return;
    Mat frame;
    while(1)
    {
        cap>>frame;//等价于cap.read(frame);
        if(frame.empty())//如果某帧为空则退出循环
            break;
        imshow("video", frame);
        waitKey(20);//每帧延时20毫秒
    }
    cap.release();//释放资源
}

三、读取视频说明

  1. 打开的视频可以是本地视频如: 
    VideoCapture cap(“1.avi”); 
    也可以是网络视频如: 
    VideoCapture cap(“http://www.laganiere.name/bike.avi“);
  2. 读取视频一定要加异常判断 
    A.打开视频失败(各种原因) 
    B. 取帧失败异常(程序结尾判断) 
    ex1: 
    if(!cap.isOpened()) //检查打开是否成功 
    return; 
    ex2: 
    cap>>frame; 
    if(!frame.empty()) //判断当前 帧是否为空 

    imshow(“video”, frame); 
    waitKey(30); 

    else break;

  四、获取指定视频类的相关参数信息

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

void main(){
    VideoCapture cap;
    cap.open("E:\\2.avi"); //打开视频,等价于   VideoCapture cap("E://2.avi");

    if(!cap.isOpened())
        return;

    int width = cap.get(CV_CAP_PROP_FRAME_WIDTH);  //帧宽度
    int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //帧高度
    int frameRate = cap.get(CV_CAP_PROP_FPS);  //帧率 x frames/s
    int totalFrames = cap.get(CV_CAP_PROP_FRAME_COUNT); //总帧数

    cout<<"视频宽度="<<width<<endl;
    cout<<"视频高度="<<height<<endl;
    cout<<"视频总帧数="<<totalFrames<<endl;
    cout<<"帧率="<<frameRate<<endl;

    Mat frame;
    while(1)
    {
        cap>>frame;//等价于cap.read(frame);
        if(frame.empty())
            break;
        imshow("video", frame);
        if(waitKey(20)>0)
            break;
    }
    cap.release();
}

 

 

posted @ 2019-11-29 16:29  刘书虫100  阅读(273)  评论(0)    收藏  举报