下面对使用opencv显示视频做一个简单的记录。当然,网上这方面的资料已经数不胜数了,我只是将其简单记录,总结一下。

  在opencv中显示视频主要有:

    (1)从本地读取视频和调用摄像头读取视频

    (2)使用C接口和使用C++接口

  一、使用opencv显示本地视频

    1、使用opencv的C++接口显示本地视频 

/*
*使用opencv的C++接口显示本地视频
*/
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp> using namespace cv; int main( int argc, char** argv )
{ VideoCapture cap("test.mp4");
if(!cap.isOpened())
{
return -1;
}
Mat frame;
while(1)
{
cap>>frame;
if(frame.empty()) break;
imshow("当前视频",frame);
if(waitKey(30) >=0)
break;
}
return 0;
}

    

    2、使用opencv的C接口显示视频的test code

/*
*使用opencv的C接口显示本地视频
*/
#include "highgui.h"
#include "cxcore.h"
#include "cv.h"
void main()
{
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCreateFileCapture("test.mp4");
IplImage* frame;
while() {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2", frame );
char c = cvWaitKey();
if( c == ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}

  二、使用opencv调用摄像头

    1、使用opencv的C++接口调用摄像头

/*
*使用opencv的C++接口调用摄像头
*/ #include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp> using namespace cv; int main( int argc, char** argv )
{ VideoCapture cap();
if(!cap.isOpened())
{
return -;
}
Mat frame;
while()
{
cap>>frame;
if(frame.empty()) break;
imshow("当前视频",frame);
if(waitKey() >=)
break;
}
return ;
}

    2、使用opencv的C接口调用摄像头

/*
*使用opencv的C接口调用摄像头
*/ #include "highgui.h"
#include "cxcore.h"
#include "cv.h"
void main()
{
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCreateCameraCapture();
IplImage* frame;
while() {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2", frame );
char c = cvWaitKey();
if( c == ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}

  三、总结

    1、使用C接口和使用C++接口需要包含不同的头文件

    2、C++接口用于保存视频信息的是VideoCapture,该数据接口提供两种构造函数VideoCapture(string &filename)和VideoCapture(int cameraNum)。以字符串为参数的构造函数用于显示本地视频,参数为视频路径。而以整型变量为参数的构造函数用于调用摄像头,参数代表调用的是第几个摄像头。

    3、C接口用于保存视频信息的是CvCapture结构体,并且通过函数cvCreateFileCapture(char * filename)来读取本地视频和通过cvCreateCameraCapture(int cameraNum)来调用摄像头。

    4、opencv中C和C++读取视频帧的方法也同相同,C通过cvQueryFrame函数来读取视频的下一帧并保存到IplImage结构体中,而C++接口直接通过">>"将视频的一帧读取出并保存到Mat结构体中。

使用opencv显示视频的方法的更多相关文章

  1. MFC学习篇(一):用OpenCV显示视频

    首先是一些基础的步骤,如建立MFC应用,添加按钮等,博主主要参考了下面这篇文章,其中的前32步都是用OpenCV显示图片和视频所必须的,即通用的.由于LZ原来有配置OpenCV的基础,所以配制还是比较 ...

  2. 用OpenCV显示视频时遇到问题

    刚刚接触OpenCV,运行了书上的例程,程序编译没有问题,在视频显示快要结束时遇到了下面的问题,代码在后面 #include "stdafx.h"#include <open ...

  3. EasyDarwin手机直播是如何实现的快速显示视频的方法

    前言 经常有人提到最近比较火的映客直播.花椒直播这种,是如何做到在打开手机直播中的某一个主播房间后,立即就能显示出主播视频,非常非常快,而且延时也比较小,是怎么做到的? 其实,这并不是什么高深的技术, ...

  4. OpenCV: imshow后不加waitkey无法显示视频

    OpenCV显示视频帧时出现一个问题,就是imshow之后若是不加waitkey则无法显示,找了很久也没找到原因. 只是发现也有人发现这个问题:   cvWaitKey(x) / cv::waitKe ...

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

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

  6. EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字

    视频处理中,往往需要在上面增加文字包括汉字英文字母数字标点等,Emgu.CV/opencv 绘图 线面文字包括中文 这篇里也有相关介绍,但是这篇里根据逐像素修改rgb值的方法效率太低 查了很多资料,基 ...

  7. qt上用opencv显示摄像头视频

    参考:http://blog.csdn.net/augusdi/article/details/8865541 代码如下: 注意,要在ui界面上放置一个“Vertical Layout”控件,调整到合 ...

  8. opencv保存视频

    利用opencv提供的方法,从摄像头获取视频,并保存为.avi格式文件. win8.1,opencv248,vs2013下测试 #include<opencv\cv.h> #include ...

  9. wpf显示视频,image控件闪屏,使用winform控件实现

    使用C#调用mingw的动态库实现视频识别软件,程序通过C++调用opencv打开视频,将图像的原始数据以rgb24的方式传递给C#端,C#通过构造图像对象给控件赋值的方式显示图片. 一开始使用wpf ...

随机推荐

  1. link them together by means of pointers

    Computer Science An Overview _J. Glenn Brookshear _11th Edition An alternative to storing a heteroge ...

  2. x5设置经典门户登录

    runtime\UIServer\index.jsp   java.lang.String url = request.getContextPath() + "/portal2/proces ...

  3. 捕获JS 错误日志

    最近在做项目的过程中,发现很多JS报错没有引起重视,我就想想把JS错误捕获了,然后展示在我们一个平台上 具体实现代码: window.onerror = function(message, url,  ...

  4. 窗口类型(Widget, Window, Dialog, Desktop, SubWindow等等)

    http://doc.qt.io/qt-5/qwidget.html#windowFlags-prop http://doc.qt.io/qt-5/qtwidgets-widgets-windowfl ...

  5. Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

    通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和O ...

  6. Java学习-034-JavaWeb_003 -- JSP page 指令

    前文对 JSP 的基础知识进行了初步的讲解,此文主要讲述 JSP page 指令. page 指令用于定义页面的多种属性,例如:脚本语言.编码方式.导入的 Java 包等,page 执行的语法如下: ...

  7. imx6 MFG TOOL 分析

    之前分析过mfgtool的内容,最近从官网下载,返现新版的mfgtool工具将imx6各种版本的linux/android都使用一个工具进行烧录.所以从新分析一下. 新版与旧版的一个区别是烧写使用的u ...

  8. No mapping found for HTTP request with URI [] in DispatcherServlet with name 'appServlet'

    项目是使用SpringMVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [] in DispatcherServlet ...

  9. web storage: sessionStorage 和 localStorage

    // sessionStorage.setItem("message",str);function saveStorage(id){ var target = document.g ...

  10. linux安装MySQL5.7.13(二进制|源码)

    二进制和源码版本安装MySQL5.7.13,并简单介绍不同之处. 一.通用二进制部分 1.下载MySQL通用二进制软件包.[root@node1 ~]# wget http://120.52.72.2 ...