我是靠谱客的博主 风趣海燕,这篇文章主要介绍OpenCV入门:显示视频,现在分享给大家,希望可以做个参考。

OpenCV还提供了载入视频并输出的功能,本节进行简单的输出显示操作。先上源代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// // 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文件的开头。其函数原型为

复制代码
1
CvCapture* cvCreateFileCapture( const char* filename );
然后我们定义了一个图像的指针,用来一次指向视频的每一帧,依次显示出来。这里我们利用了一个函数cvQueryFrame(),从摄像头或者文件中抓取并返回一帧,其声明为
复制代码
1
IplImage* cvQueryFrame( CvCapture* capture );
cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中分配好的内存。

在while循环里,如果所有帧加载完毕或失败,即退出,即

复制代码
1
2
if(!frame) break;
此外,利用cvWaitKey()在帧与帧之间停留33ms,也就是假设该视频是一秒30帧。然后如果此时在键盘上按下了esc键,那么cvWaitKey()会返回33,此时也退出显示,即

复制代码
1
2
3
4
5
//停顿33ms,这里假设一秒有30帧 char c = cvWaitKey(33); //如果从键盘输入esc,ASCII值为27,退出 if(c == 27) break;
最后利用cvReleaseCapture()释放视频指针。


最后

以上就是风趣海燕最近收集整理的关于OpenCV入门:显示视频的全部内容,更多相关OpenCV入门内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(87)

评论列表共有 0 条评论

立即
投稿
返回
顶部