opencv(6):视频操作基础

VideoCapture是OpenCV2.X中新增的一个类,对应于之前C语言版本的Capture结构体。它提供了从摄像机或视频文件捕获视频的C++接口,作用是从视频文件或从摄像头捕获视频并显示出来。

  1. 读取并播放视频
    通过对VideoCapture类的分析,可以发现利用它读入视频的方法一般有如下两种。比如读入的视频为工程路径下名为"l.avi”的视频文件,那么这两种写法
    分别如下。
    (1)先实例化再初始化:
    VideoCapture capture
    capture.open("1.avi")
    
    (2)在实例化的同时进行初始化:
    VideoCapture capture(“1.avi”)
    这两种写法的区别就如我们定义一个int类型的变量一样:"int a;a=1;”为先定义再初始化:"int a=1;”为在定义时初始化。
    视频读入到VideoCapture类对象之后,紧接着可以用一个循坏将每一帧显示出来,相关代码如下:
    //循环显示每一帧
    while(1)
    {
    	Matframe;//定义一个Mat变量,用于存储每一帧的图像
    	capture>>frame://读取当前帧
    	imshow("读取视頻",frame)//显示当前帧
    	//延时30ms
    	waitKey(30)}
    
    这段代码中,首先定义了一个Mat变量,用于存储每一帧的图像,接着读取当前帧到Mat变量中,然后调用imshow显示当前的这一帧图像,并用waitKey
    延时30毫秒,开始下一次循环。
    #include
    using namespace cv;
    int main(){
    	//读入视频
    	VideoCapture capture("mingchangmian.mp4");
    	//显示每一帧
    	while (1)
    	{
    		Mat frame;
    		capture >> frame;
    		imshow("名场面", frame);
    		waitKey(30);
    	}
    	return 0;
    }
    
    程序运行截图:
    opencv(6):视频操作基础_第1张图片
  2. 调用摄像头采集图像
    如果我们要调用摄像头进行视频采集的话,将代码VideoCapture capture("mingchangmian.mp4”);的"mingchangmian.mp4”换为0就可以了,表示
    调用摄像头而不是从文件中读取视频。对应于上文讲到的两种写法,即:
    (1)先实例化再初始化
    VideoCapture capture;
    capture.open(0);
    (2) 在实例化的同时进行初始化
    VideoCapture capture(0);
    可以发现,利用VideoCapture类调用摄像头采集视频和从文件中读入视频的区别仅仅是在VideoCapture类对象初始化时指定的内容的区别,即,是指定文件名如“mingchangmian.mp4”,还是填一个0表示调用摄像头而已。接下来让我们一起看看用Opencv调用摄像头的精简示例程序,并在代码中熟悉整个调用过程。
    #include
    using namespace cv;
    int main(){
    	//读入视频
    	VideoCapture capture(0);
    	//显示每一帧
    	while (1)
    	{
    		Mat frame;
    		capture >> frame;
    		imshow("名场面", frame);
    		waitKey(30);
    	}
    	return 0;
    }
    
    opencv(6):视频操作基础_第2张图片
    另外,还可以使用摄像头程序配合canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频,源码如下:
    opencv(6):视频操作基础_第3张图片

你可能感兴趣的:(opencv3编程入门)