博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv读取视频文件并显示的程序详细解释
阅读量:4225 次
发布时间:2019-05-26

本文共 1701 字,大约阅读时间需要 5 分钟。

int main( int argc, char** argv )
{


    //========================================================
    // CvCapture 是一个结构体,用来保存图像捕获所需要的信息。
    // opencv提供两种方式从外部捕获图像,一种是从摄像头中,一种
    // 是通过解码视频得到图像。两种方式都必须从第一帧开始一帧一帧
    // 的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。
    // 比如从视频文件中获取,需要保存视频文件的文件名,相应的******
    // 类型,下一次如果要获取将需要解码哪一帧等。 这些信息都保存在
    // CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧
    // 需要将新信息传给获取的api接口
    //=======================================================
    CvCapture* capture = 0;
    //===========================================================
    // IplImage 是结构体类型,用来保存一帧图像的信息,也就是一帧
    // 图像的所有像素值构成的一个矩阵
    //===========================================================
    IplImage *frame, *frame_copy = 0;
     
     // 创建一个窗口,用“result”作为窗口的标识符
     cvNamedWindow( "result", 1 );
     
     // ==========================================
     // 初始化一个视频捕获操作。
     // 告诉底层的捕获api我想从 Capture1.avi中捕获图片,
     // 底层api将检测并选择相应的******并做好准备工作
     //==============================================
   capture = cvCaptureFromFile("c://Capture1.avi")

    // 如果 初始化失败,那么capture为空指针,程序停止,
    // 否则进入捕获循环
    if( capture )
    {

        // 捕获循环
        for(;;)
        {

            // 调用cvGrabFrame,让底层api解码一帧图像
            // 如果解码失败,就退出循环
            // 如果成功,解码的图像保存在底层api的缓存中
            if( !cvGrabFrame( capture ))
                break;
            
            // 将解码得到图像信息从缓存中转换成IplImage格式放在frame中
            frame = cvRetrieveFrame( capture );

            // 如果获取缓存或转换失败,则退出循环
            if( !frame )
                break;

            // 将frame中的图像信息在窗口result中显示
   cvShowImage( "result", frame );

   // 暂停一会儿,让你看一下图像
   Sleep(66.9);
            
            // 如果你敲了键盘,就退出程序,否则继续捕获下一帧
            if( cvWaitKey( 10 ) >= 0 )
                break;
        }

        // 退出程序之前要清理一下堆栈中的内存,免得内存泄露
        //cvReleaseImage( &frame );注意不需要这句,因为frame是从视频中捕获的,没有单独分配内存,无需释放,当capture 释放的时候frame自然就释放了。
        
        // 退出之前结束底层api的捕获操作,免得它们占着茅坑不拉屎
        // 比如会使得别的程序无法访问已经被它们打开的文件
        cvReleaseCapture( &capture );
    
}
    cvDestroyWindow("result");


    return 0;
}

链接:http://blog.csdn.net/scollins/article/details/5886465


你可能感兴趣的文章
CUDA 学习(十一)、共享内存
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十四章 生化尖兵
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十五章 超级马里奥64
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十七章 游戏感的原理
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十八章 我想做的游戏
查看>>
游戏设计的艺术:一本透镜的书——第十章 某些元素是游戏机制
查看>>
游戏设计的艺术:一本透镜的书——第十一章 游戏机制必须平衡
查看>>
游戏设计的艺术:一本透镜的书——第十二章 游戏机制支撑谜题
查看>>
游戏设计的艺术:一本透镜的书——第十三章 玩家通过界面玩游戏
查看>>
编写苹果游戏中心应用程序(翻译 1.3 为iOS应用程序设置游戏中心)
查看>>
编写苹果游戏中心应用程序(翻译 1.4 添加游戏工具包框架)
查看>>
编写苹果游戏中心应用程序(翻译 1.5 在游戏中心验证本地玩家)
查看>>
编写苹果游戏中心应用程序(翻译 1.6 获取本地玩家的信息)
查看>>
编写苹果游戏中心应用程序(翻译 1.7 在游戏中心添加朋友)
查看>>
编写苹果游戏中心应用程序(翻译 1.8 获取本地玩家的好友信息)
查看>>
WebGL自学教程《OpenGL ES 2.0编程指南》翻译——勘误表
查看>>
WebGL自学教程——WebGL示例:13.0 代码整理
查看>>
WebGL自学教程——WebGL示例:14.0 代码整理
查看>>
恶心的社会
查看>>
中国式危机公关9加1策略(第五章 慎用信息控制策略)
查看>>