OpenCV3读取视频或摄像头
我们可以利用OpenCV读取视频文件或者摄像头的数据,将其保存为图像,以用于后期处理。下面的实例代码展示了简单的读取和显示操作:
// This is a demo introduces you to reading a video and camera
#include <iostream>
#include <string>
#include <sstream>
using namespace std; // OpenCV includes
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp> // for camera
using namespace cv; // OpenCV command line parser functions
// Keys accepted by command line parser
const char* keys =
{
"{help h usage ? | | print this message}"
"{@video | | Video file, if not defined try to use webcamera}"
}; int main(int argc, const char** argv)
{
CommandLineParser parser(argc, argv, keys);
parser.about("Reading a video and camera v1.0.0"); // If requires help show
if (parser.has("help"))
{
parser.printMessage();
return ;
}
String videoFile = parser.get<String>(); // Check if params are correctly parsed in his variables
if (!parser.check())
{
parser.printErrors();
return ;
} VideoCapture cap;
if (videoFile != "")
{
cap.open(videoFile);// read a video file
}else {
cap.open();// read the default caera
}
if (!cap.isOpened())// check if we succeeded
{
return -;
} namedWindow("Video", );
while ()
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("Video", frame);
if (waitKey() >= ) break;
} // Release the camera or video file
cap.release();
return ;
}
在我们解释如何读取视频文件或者摄像头输入之前,我们需要首先介绍一个非常有用的新类,它可以用于帮助我们管理输入的命令行参数,这个类在OpenCV 3.0中被引入,被称为CommandLineParser类。
// OpenCV command line parser functions
// Keys accepted by command line parser
const char* keys =
{
"{help h usage ? | | print this message}"
"{@video | | Video file, if not defined try to use webcamera}"
};
对于一个命令行解析器(command-line parser)而言,我们首先需要做的事情就是在一个常量字符串向量中定义我们需要或者允许出现的参数列表。其中的每一行都有一个固定的模式:
{ name_param | default_value | description }
其中,name_param(参数名称)参数之前可以添加“@”符号,用于定义将这个参数作为默认输入。我们可以使用不止一个参数。
CommandLineParser parser(argc, argv, keys);
构造函数将会读取主函数的输入参数和之前定义好的参数作为一个默认输入。
// If requires help show
if (parser.has("help"))
{
parser.printMessage();
return ;
}
成员方法has()将会检查指定的参数是否存在。在这个示例程序中,我们将会检查用户是否添加了“-h”、"-?"、“--help”或者"--usage"参数,如果有,然后使用printMessage()成员方法输出所有的参数描述。
String videoFile = parser.get<String>();
使用get<typename>(name_param)函数,我们可以访问和读取输入参数的任何内容。上一行程序代码也可以写成:
String videoFile = parser.get<String>("@video");
在获取了所有需要的参数之后,我们可以检查是否这些参数都已经被正确处理,如果其中有参数未能成功解析,则显示一条错误信息。
// Check if params are correctly parsed in his variables
if (!parser.check())
{
parser.printErrors();
return ;
}
OpenCV3读取视频或摄像头的更多相关文章
- opencv3读取视频并保存为图片
#include <iostream> #include <vector> #include <opencv2/opencv.hpp> using namespac ...
- C/C++ OpenCV读取视频与调用摄像头
原文:http://blog.csdn.net/qq78442761/article/details/54173104 OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头 读取视 ...
- opencv学习之路(2)、读取视频,读取摄像头
一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open(“1.a ...
- python+opencv读取视频,调用摄像头
引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...
- Opencv读取视频
CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...
- python_Opencv_读取视频
目标 • 学会读取视频文件,显示视频,保存视频文件 • 学会从摄像头获取并显示视频 • 你将会学习到这些函数:cv2.VideoCapture(),cv2.VideoWrite()用摄像头捕获视频 使 ...
- day7 opencv+python 读取视频,没有东西
1.读取视频man.avi, 报错. 我的视频和文件在同一目录下. #coding=utf-8 import numpy as np import cv2 cap = cv2.VideoCapture ...
- Python+OpenCV4:读写输入和输出的简单实践(图片、视频、摄像头)
典型的文件处理流程如下: 利用命令行参数 sys.argv 命令行参数是读取文件时常用的方式. 命令行参数保存在 sys.argv 的列表中,列表的第一个元素是脚本名称,后面的元素是命令行参数: 通过 ...
- 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...
随机推荐
- [AngularJS] ngAnimate angular way !!
Idea is set up javascript as an api, then just change html to control the behavor. var app = angula ...
- 解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
上篇文章中我们掌握了表面剔除和剪裁模式 这篇文章将利用这些知识实现一个简单的,可是又非经常常使用的样例:把一张图片做成圆角矩形 例3:圆角矩形Shader 好吧我承认在做这个样例的时候走了不少弯路,因 ...
- C 高级编程 2 内存管理
理解malloc的工作原理: malloc使用一个数据结构(链表)来维护分配的空间.链表的构成: 分配的空间.上一个空间的地址.下一个空间的地址.以及本空间的信息等. 对malloc分配的空间不要越界 ...
- UNIX基础知识之系统调用与库函数的区别与联系
上图为UNIX操作系统的体系结构.内核的接口被称为系统调用(system call),公用函数库构建在系统调用接口之上,应用软件既可以使用公用函数库,也可直接使用系统调用. 更详细的说明如下: 所有操 ...
- graylog2+syslog-ng+mongodb构建集中管理日志服务器 --转载
原文地址:http://blog.chinaunix.net/uid-11065483-id-3654882.html 由于公司内需要监控QQ的上下线记录,原本使用了分光+Panabit+Splunk ...
- 探索 Linux 内存模型--转
引用:http://www.ibm.com/developerworks/cn/linux/l-memmod/index.html 理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计 ...
- Helpers\Number
Helpers\Number This helper has 2 methods for converting a number format and to get a percentage. Num ...
- 琐碎-关于hadoop的GenericOptionsParser类
GenericOptionsParser 命令行解析器 是hadoop框架中解析命令行参数的基本类.它能够辨别一些标准的命令行参数,能够使应用程序轻易地指定namenode,jobtracker,以及 ...
- Linux基本命令之逻辑测试二
1.首先介绍一个与test一样的测试方式[ expression ](千万注意expression的前后都有空格,没有空格的话会报错) 这个测试方式经常作为if的条件. /home/www这个文件名存 ...
- 锋利的jQuery第2版学习笔记1~3章
第1章,认识jQuery 注意:使用的jQuery版本为1.7.1 目前流行的JavaScript库 Prototype(http://www.prototypejs.org),成型早,面向对象的思想 ...