利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头。

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

1、读取并播放视频

通过对VideoCapture类的分析,可以发现利用它读入视频的方法一般有如下两种:

1)先实例化再初始化

VideoCapture capture;

capture.open("1.avi");//1.avi为工程路径下的视频文件

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

VideoCapture capture("1.avi");

视频读入到VideoCapture类对象之后,紧接着可以用一个循环将每一帧都显示出来,相关代码如下:

//循环显示每一帧
while()
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture>>frame;//读取当前帧
imshow("读取视频",frame);//显示当前帧
waitkey();//延时30ms
}

上面代码中,首先定义一个Mat变量,用于存储每一帧的图像,接着读取当前帧到Mat变量中,然后调用imshow显示当前的这一帧图像,并用waitkey延时30毫秒,开始下一次循环。
视频载入示例程序

#include<opencv2/opencv.hpp>
using namespace cv;//包含cv命名空间
int main()
{
//1读图视频
VideoCapture capture("1.avi");
//2循环显示每一帧
while ()
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频",frame);//显示当前帧
waitKey();//延时30ms
}
return ();
}

2、调用摄像头采集图像
要调用摄像头进行视频采集的话,将代码VideoCapture capture("1.avi")中的"1.avi"换为0即可;表示调用摄像头而不是从文件中读取。对应于上文讲到的两种写法,即有

1)先实例化再初始化

VideoCapture capture;

capture.open(0);

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

VideoCapture capture(0);

代码:

#include<opencv2/opencv.hpp>
using namespace cv;//包含cv命名空间
int main()
{
//1从摄像头读入视频
VideoCapture capture();
//2循环显示每一帧
while ()
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频",frame);//显示当前帧
waitKey();//延时30ms
}
return ();
}

下面通过上面的摄像头程序来调用canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频,

#include<opencv2/opencv.hpp>
using namespace cv;//包含cv命名空间
int main()
{
//1从摄像头读入视频
VideoCapture capture();
Mat edges;
//2循环显示每一帧
while ()
{
//1读入图像
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
//2将源图像转换为灰度图像
cvtColor(frame,edges,CV_BGR2GRAY);//转化BGR彩色图为灰度图
//3使用3*3内核来降噪(2*3+1=7)
blur(edges,edges,Size(,));//进行模糊
//4进行canny边缘检测并显示
Canny(edges,edges,,,);
imshow("被canny后的视频",edges);//显示经过处理后的当前帧
if(waitKey()>=)
break;//延时30ms
}
return ();
}

1.6 opencv视频操作基础的更多相关文章

  1. OpenCV——视频操作基础

    读入视频: VideoCapture 类 //方法一 VideoCapture capture; capture.open("test.avi"); //方法二 VideoCapt ...

  2. opencv 视频处理相关

    包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...

  3. opencv学习之基础

    前段时间一直在钻研深度学习中的卷积神经网络,其中的预处理环节可以说非常关键,主要就是对图片和视频进行处理.而图像处理就涉及到图形学和底层技术细节,这是一个比较精深和专业的领域,假设我们要从头开始做起, ...

  4. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

    通过"javaCV入门指南:序章 "大家知道了处理音视频流媒体的前置基本知识,基本知识包含了像素格式.编解码格式.封装格式.网络协议以及一些音视频专业名词,专业名词不会赘述,自行搜 ...

  5. OpenCV2:第十章 视频操作

    一.简介 OpenCV提供了专门操作视频的接口类VideoCapture 二.构造VideoCapture类 VideoCapture::VideoCapture() VideoCapture::Vi ...

  6. [SQL]SQL语言入门级教材_SQL数据操作基础(二)

    SQL数据操作基础(初级) netnova 于 -- :: 加贴在 数据库探讨: 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简 ...

  7. 安装Linux系统,学习Linux操作基础

    20189230杨静怡 2018-2019-2 <移动平台开发实践>第1周学习总结 安装Linux系统内容总结 一.学习"基于VirtualBox虚拟机安装Ubuntu图文教程& ...

  8. VIM操作基础命令

    VIM操作基础命令 1 文件操作 1.1 打开文件 VIM 使用 –o 或 –O 选项打开多个文件,其中 –o 表示垂直并排,例如 vim -o lesson4 lesson5 lesson6.大O表 ...

  9. OpenCV视频读取播放,视频转换为图片

    转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...

随机推荐

  1. Requests 库

    Requests 库的两个重要的对象:(Request , Response) Response对象的属性: import requests r =requests.get('http://www.b ...

  2. hdu5087 Revenge of LIS II (dp)

    只要理解了LIS,这道题稍微搞一下就行了. 求LIS(最长上升子序列)有两种方法: 1.O(n^2)的算法:设dp[i]为以a[i]结尾的最长上升子序列的长度.dp[i]最少也得是1,就初始化为1,则 ...

  3. InnoDB参数详解

    1.查询5.5版本的InnoDB参数并注释:[root@localhost etc]# grep -i innodb my.cnf; t_innodb; otherwise, slaves may d ...

  4. THUSC 2017 大魔法师

    一个序列,每个物品有三个权值 $A,B,C$ 要求维护: 1.区间 $A_i+=B_i$ 2.区间 $B_i+=C_i$ 3.区间 $C_i+=A_i$ 4.区间 $A_i+=v$ 5.区间 $B_i ...

  5. UVA - 11754 Code Feat (分块+中国剩余定理)

    对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...

  6. Python+Apache+CGI完全配置

    http://www.tuicool.com/articles/jIZfaqQ 操作系统环境:Ubuntu 15.10 0.需求原因 想在我的Linux上架设Apache来运行CGI程序,方便以后用A ...

  7. WINRAR4.2破解方式或注册码

    急求WINRAR4.2破解方式或注册码,谢谢大侠们!~ 亲,我是复制别个的但是可以用64位32位都可以用 自己动手破解 那感觉才棒! 来吧 将以下数据复制到记事本中 然后另存名为“rarreg.key ...

  8. 超时 CS-8610 中性笔

    超时 CS-8610 中性笔 最初觉得这款笔很简单,而且还认为有点丑,因为笔头比较短. 比较特别提这款中性笔比一般的中性笔要粗一点. 使用后才发现比其它的中性笔好用,因为笔杆粗,手感好,笔杆上并没有特 ...

  9. [推荐]InfoQ上的深入浅出Node.js的系列文章

    InfoQ上的深入浅出Node.js的系列文章 详情如下链接:http://www.heiboard.com/?p=2081

  10. Operating System-进程/线程内部通信-信号量和PV操作

    本文介绍操作系统进程管理的两个核心概念: 信号量 PV操作 一.信号量介绍 1.1 信号量引入 信号量(Semaphore)1965年由Dijkstra引入的.信号量一般由一个值是一个变量,其值有可能 ...