接上一篇:Ubuntu+QT+Opencv读取视频

来源:互联网 发布:对云计算的理解ibm 编辑:程序博客网 时间:2024/05/06 22:47

这篇文章主要介绍Opencv视频的简单读取:

相似,视频的读取和图片类似,我们先看下代码:敲打

#include "highgui.h"
int main(int argc, char* argv[])
{
    cvNamedWindow("avi");
    CvCapture* capture = cvCreateFileCapture("
文件路径");
    IplImage* frame;
    while(1)
    {
        frame = cvQueryFrame(capture);
        if(!frame)break;


        cvShowImage("avi",frame);
        char c = cvWaitKey(33);
        if(c==27)
            break;
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("avi");
    return 0;
}

下面对简单分析下:

CvCapture是个结构体,来保存图像捕获所需要的信息。

Opencv提供两种方式来从外部捕获图像

一:从摄像头中。

二:通过解码视频得到图像。

由于两种方法都是一帧一帧的获取,因此每获取一帧后都要保存相应的状态和参数。

例如上面的例子,从视频中获取信息后,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取需要解码那一帧等。这些信息都保存在CvCapture结构中。每获取一帧后这些信息都将被更新。


cvCreateFileCapture(char*name)

通过输入要读取的avi文件的路径,然后,该函数返回一个指向CvCapture结构体的指针。


cvQueryFrame(capture)

输入一个CvCapture类型的指针,该函数主要功能是将视频文件的下一帧加载到内存。与cvLoadImage的不同之处是,该函数不重新分配内存空间。


cvWaitKey(33)
当前帧被显示后,等待33毫秒。如果用户触发了一个按键,会被设置成这个按键的ASCII码,否则会被设置成-1。
ncvWaitKey(33)在此处的另外一个作用是,控制帧率。


cvReleaseCapture(&Capture)
¨ 释放为CvCapture结构体开辟的内存空间
¨ 关闭打开的AVI文件相关的文件句柄


如果读取摄像头只需要把cvCreateFileCapture改成cvCreateCameraCapture即可,另外摄像头驱动要安装好。


遇到问题欢迎提问。同样ippicv也在此处下载:点击打开链接