OpenCV学习 2:播放AVI视频
原创文章,欢迎转载,转载请注明出处
第二个程序,播放视频。用opencv做起来是如此的简单。。哈哈。
学Opencv,只是为了在它的基础上实现工程应用,而它里面高深的理论我等屌丝只能感叹了,希望学习的效果是能清楚 了解视觉方面所需要用到的工具和对他们有一定的了解,后续通过对这些理论和工具的了解实现相应的视觉功能,现在还不够熟悉,就照着教材和API学习下。
视频,就是一张一张的画面,正常大于24帧人眼就看不到闪烁了。程序的大概思路就是通过opencv给的函数接口,一帧一帧的读取AVI视频的信息,然后刷新显示就OK了。
各种函数可以通过http://wiki.opencv.org.cn/index.php/Template:Doc,查找参考手册的到函数的原型。
首先需要创建一个窗口,查wiki可以查到函数原型如下:
cvNamedWindow
创建窗口
int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE );
name
窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。
flags
窗口属性标志,为1时表示会根据图像自动调整窗口大小。目前唯一支持的标志是CV_WINDOW_AUTOSIZE。当这个标志被设置后,用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。
函数cvNamedWindow创建一个可以放置图像和trackbar的窗口。被创建的窗口可以通过它们的名字被引用。
如果已经存在这个名字的窗口,这个函数将不做任何事情。
然后通过cvCreateFileCapture函数初始化获取视频,函数原型如下:
cvCreateFileCapture
初始化从文件中获取视频
CvCapture* cvCreateFileCapture( const char* filename );
filename
视频文件名。
函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。
当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。
视频已经获取了,然后就是一帧一帧显示咯。。哈
源代码如下:
#include <highgui.h>
void main()
{
cvNamedWindow("2.2", CV_WINDOW_AUTOSIZE ); //创建窗口
CvCapture* capture = cvCreateFileCapture("takeoff.avi");
IplImage* frame;
while ()
{
frame = cvQueryFrame( capture ); //获取一帧视频
if (NULL == frame)
{
break;
}
cvShowImage("2.2", frame);
char c = cvWaitKey(); //延时等待按键
if ( == c) //esc的按键码
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("2.2");
}
再次看看四轴第一次离地的截图。。

加个进度条 主要就一个函数 cvCreateTrackbar,创建一个滚动条,然后可以设置一个回调函数,当滚动条被我们触发的时候,库会自动调用回调函数,回调函数是“不需要你问我在干什么,我会告诉你我在干什么”,UCGUI里面大概对回调函数有这样一句解释。。哈。。出发后,通过cvSetCaptureProperty函数设置当前帧的为止,就可以实现鼠标拖动滚动条控制视频的播放了,真是简单暴力。
为了让滚动条可以和视频联动,还需要两个函数,一个是获取视频当前的帧cvGetCaptureProperty和设置滚动条位置的函数cvSetTrackbarPos,有了这个就可以联动了。。函数原型就不写了,wiki上全有。。
frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES); //获取当前帧数
cvSetTrackbarPos("Position", "2.2", frames);
不过里面有个问题,在循环里面加了 这两行代码更新滚动条,不知道为什么,会导致视频的帧率越来越低。。。。。不用的时候,CPU只有1%使用,用了后六核都要60%多用到,不知道问题在哪。。。。囧。。。以后再看看。哈。。

OpenCV学习 2:播放AVI视频的更多相关文章
- OpenCV学习:播放avi视频文件
#if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...
- 1.0.1-学习Opencv与MFC混合编程之---播放AVI视频
资源源代码:http://download.csdn.net/detail/nuptboyzhb/3961639 版本1.0.1新增内容 Ø 新建菜单项,Learning OpenCV——> ...
- OpenCV 入门示例之二:播放 AVI 视频
前言 本文展示一个播放 AVI 视频的程序.( 呵呵是 AVI 视频不是 AV 视频噢! ) 代码示例 // 此头文件包含图像IO函数的声明 #include "highgui.h" ...
- ASP.NET MVC应用程序播放AVI视频
前面Insus.NET实现一系列在MVC应用程序播放SWF, FLV, WMV, RM, RMVB视频.每篇使用不同的方法方式,大同小异.这篇中,为了MVC应用程序播放AVI视频,用纯M, V, C来 ...
- 1.0.2-学习Opencv与MFC混合编程之---为播放AVI视频添加滑动条
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961642 版本1.0.2新增内容 Ø 全局变量和函数的添加: 在CVMFCview.cpp文件 ...
- OpenCV学习 4:摄像头视频读写与边缘检测
原创文章,欢迎转载,转载请注明出处 想实现人脸识别,车辆识别,车牌识别.一般我们可不是读硬盘里面的视频文件的,都是直接从摄像头读取视频流然后直接识别的.所以读取摄像头的视频流这是基础...OpenCV ...
- ios网络学习------9 播放网络视频
IOS提供了叫做MPMoviePlayerController MPMoviePlayerViewController两个类.能够轻松用来实现视频播放. MPMoviePlayerViewContr ...
- [学习OpenCV攻略][004][播放AVI视频]
cvCreateFileCapture(文件路径) 创建一个影音文件录像机,返回值为CvCapture类型,用于读取视频文件 cvQuerFrame(视频) 将下一帧视频文件载入内存,当CvCaptu ...
- opencv读取并播放avi视屏
视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果. 这样也就可以通过opencv对实时的视屏流进行处理了. #include "stdaf ...
随机推荐
- windows下mysql数据库表名大小写不敏感
最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题 ...
- 【转】Python中执行cmd的三种方式
原文链接:http://blog.csdn.net/menglei8625/article/details/7494094 目前我使用到的python中执行cmd的方式有三种: 1. 使用os.sys ...
- linux配置jdk环境详解
环境:Redhat Server 5.1(虚拟机) 工具:Xftp4 jdk-7-linux-i586.rpm文件 步骤1:把jdk-7-linux-i586.rpm文件拷贝到/usr/local目 ...
- Es分析
http://my.oschina.net/lxbzj/blog/138587 http://donlianli.iteye.com/blog/1923017 http://tangzhaohui.n ...
- JavaScript实现定点圆周运动
目是这样的:假设有一定点(400px,300px),通过JavaScript使一个直径20px的圆点以 r=180px 为半径围绕该点做匀速圆周运动. 这个问题的整体实现思想应该是这样的,看到“半径” ...
- Egret的若干局限
Egret是个好东西,整套workflow用下来,特别顺手,对于移动端游戏的开发来说,选择Egret无疑是个不二的选择. 当然,小学语文课上老师就教过一种写作手法,欲扬先抑,笔者今天倒过来,来说说Eg ...
- 理解Unity加载和内存管理
转自:http://game.ceeger.com/forum/read.php?tid=4394#info Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBun ...
- linux学习之(六)-主机名、网络IP的配置与查看
设置Linux 本机IP有一个非常好用的命令就是setup命令,在Linux终端打入setup命令就会打开Linux配置窗口,如下图: . 在打开的窗口中通过上下键选择 Network config ...
- jQuery插件
1. Lightbox 2: Lightbox 2 是一款很酷的图片显示插件,可以在一个平滑展开的新窗口中展现出图片,而同时页面的其余部分都变成黑色背景.使用这款插件,是为了当你的的图片过大必须 ...
- 前端入门HTML5扩展知识(一)
一. 请描述一个网页从开始请求到最终显示的完整过程? 1. 在浏览器中输入网址: 2. 发送至 DNS 服务器并获得域名对应的 WEB 服务器的 IP 地址: 3. 与 WEB 服务器建立 TC ...