我们可以利用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读取视频或摄像头的更多相关文章

  1. opencv3读取视频并保存为图片

    #include <iostream> #include <vector> #include <opencv2/opencv.hpp> using namespac ...

  2. C/C++ OpenCV读取视频与调用摄像头

    原文:http://blog.csdn.net/qq78442761/article/details/54173104 OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头 读取视 ...

  3. opencv学习之路(2)、读取视频,读取摄像头

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

  4. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  5. Opencv读取视频

    CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...

  6. python_Opencv_读取视频

    目标 • 学会读取视频文件,显示视频,保存视频文件 • 学会从摄像头获取并显示视频 • 你将会学习到这些函数:cv2.VideoCapture(),cv2.VideoWrite()用摄像头捕获视频 使 ...

  7. day7 opencv+python 读取视频,没有东西

    1.读取视频man.avi, 报错. 我的视频和文件在同一目录下. #coding=utf-8 import numpy as np import cv2 cap = cv2.VideoCapture ...

  8. Python+OpenCV4:读写输入和输出的简单实践(图片、视频、摄像头)

    典型的文件处理流程如下: 利用命令行参数 sys.argv 命令行参数是读取文件时常用的方式. 命令行参数保存在 sys.argv 的列表中,列表的第一个元素是脚本名称,后面的元素是命令行参数: 通过 ...

  9. 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)

    OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...

随机推荐

  1. CSAPP缓冲区溢出攻击实验(上)

    CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数 ...

  2. JS加解密URL参数encodeURIComponent() decodeURIComponent()

    参考1:http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp 参考2:http://www.w3school.com.cn/js/jsr ...

  3. 观察者模式(二)--《Head First DesignPattern》

    我们用Java中自带的观察者模式接口来重写前面的例子. 先看一下类图: 这里用到了一个setChanged函数,它用来标记状态已经改变的事实,好让notifyObservers()知道当它调用时就应该 ...

  4. Node.js module.exports和exports的区别

    require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码: foo.js exports.a = functio ...

  5. 关于Java多态的总结.

    [圣思源笔记]JAVA SE Lesson 11. 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成对象(Object).对象又叫做实例(Instance).2. ...

  6. 【原】web服务器占有量统计等 web网站

    根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中 1. https://w3techs.com/ nginx 中文站 2. http://www.nginx.cn/doc/

  7. Ehcache(2.9.x) - API Developer Guide, Cache Manager Event Listeners

    About CacheManager Event Listeners CacheManager event listeners allow implementers to register callb ...

  8. Android 扫描蓝牙设备

    Android扫描蓝牙设备是个异步的过程,核心的步骤为:调用bluetoothAdapter的startDiscovery()进行设备扫描,扫描的结果通过广播接收处理!具体如下: 1.申请相关权限 & ...

  9. JSP连接mysql 驱动包

    360网盘 https://yunpan.cn/cPxT6CV9Kydyb  访问密码 1df9

  10. sql server 判断日期当前月有多少天

    declare @tm datetime set @tm = CONVERT(datetime,'2013-3-12')declare @days intselect @days = case whe ...