概述
OpenCV还提供了载入视频并输出的功能,本节进行简单的输出显示操作。先上源代码:
//
//
main.cpp
//
Display_Vedio
//
//
Created by 黄露 on 16/3/18.
//
Copyright © 2016年 黄露. All rights reserved.
//
#include "highgui.h"
int main(int argc, const char * argv[]) {
//创建窗口
cvNamedWindow("Vedio", CV_WINDOW_AUTOSIZE);
//创建视频对象,打开视频文件
CvCapture* capture = cvCreateFileCapture("/Users/huanglu/Desktop/test.mov");
//定义指向视频每一帧的图像指针
//只是指针,并没有为其创建内存,其指向视频内存的一部分
IplImage* frame;
while(1){
//加载视频的下一阵帧
frame = cvQueryFrame(capture);
//如果加载失败,退出
if(!frame)
break;
//显示该帧图像
cvShowImage("Vedio", frame);
//停顿33ms,这里假设一秒有30帧
char c = cvWaitKey(33);
//如果从键盘输入esc,ASCII值为27,退出
if(c == 27)
break;
}
//释放视频指针
cvReleaseCapture(&capture);
//释放窗口
cvDestroyWindow("Vedio");
return 0;
}
其中函数cvCreateFileCapture()通过参数设置确定要读入的avi文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入avi文件的信息,其中包含状态信息。
调用这个函数之后,返回指针所指向的CvCapture结构被初始化到对应的avi文件的开头。其函数原型为
CvCapture* cvCreateFileCapture( const char* filename );
然后我们定义了一个图像的指针,用来一次指向视频的每一帧,依次显示出来。这里我们利用了一个函数cvQueryFrame(),从摄像头或者文件中抓取并返回一帧,其声明为
IplImage* cvQueryFrame( CvCapture* capture );
cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中分配好的内存。
在while循环里,如果所有帧加载完毕或失败,即退出,即
if(!frame)
break;
此外,利用cvWaitKey()在帧与帧之间停留33ms,也就是假设该视频是一秒30帧。然后如果此时在键盘上按下了esc键,那么cvWaitKey()会返回33,此时也退出显示,即
//停顿33ms,这里假设一秒有30帧
char c = cvWaitKey(33);
//如果从键盘输入esc,ASCII值为27,退出
if(c == 27)
break;
最后利用cvReleaseCapture()释放视频指针。
最后
以上就是风趣海燕为你收集整理的OpenCV入门:显示视频的全部内容,希望文章能够帮你解决OpenCV入门:显示视频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复