zoukankan      html  css  js  c++  java
  • opencv实例三:播放AVI格式视频

    一、不带滚动条的视频读取播放。

    1、原理介绍:视频的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就可以实时的视频流进行处理了。

    2、代码如下:

     1 /***********************************************************************************
     2 开发环境:opencv3.0.0 + vs2012旗舰版;win7正式版32位
     3 功能描述:播放AVI格式视频
     4 作者信息:博乐Bar
     5 开发时间:20150922
     6 ***********************************************************************************/
     7 #include <opencv2/opencv.hpp>
     8 using namespace cv;
     9 using namespace std;
    10  
    11 int main()
    12 {
    13     cvNamedWindow("AVI视频播放—博乐Bar");//创建一个窗口,固定大小不随图像改变
    14     /**********
    15     cvCreateFileCapture函数读取路径下的视频文件,把帧信息指针返回到CvCapture结构体指针中,
    16     包含关于要读入的avi文件的状态信息此次调用返回avi视频文件的开头。
    17     **********/
    18     CvCapture * capture = cvCreateFileCapture("video.avi");
    19     IplImage * frame;
    20 
    21     //需要不断循环读取下一帧,因此需要while循环,只有当用户按键或者视频读取完毕时才跳出循环
    22     while(1)
    23     {
    24         frame = cvQueryFrame(capture);//根据CvCapture指针提供的状态信息,抓取帧信息保存到IplImage指针里
    25         if(!frame)break;
    26         cvShowImage("AVI视频播放—博乐Bar",frame);
    27         char c = cvWaitKey(33);//①控制帧率,控制视频播放的快慢;②接受键盘输入,返回值为该键盘对应的asiccII码
    28         if(c==27) break; //十进制数27是键盘退出键Esc对应的asiccII码
    29     }
    30     //释放CvCapture指针的内存空间,同时关闭命名窗口
    31     cvReleaseCapture(&capture);
    32     cvDestroyWindow("AVI视频播放—博乐Bar");
    33     return 0;
    34 }
    View Code

    3、关于以上代码的几点说明:

    ①实现的功能:读取文件夹路径的视频,并且播放,播放速度粗略的控制用cvwaitkey函数;

    ②关于cvwaitkey函数:

    函数原型:cvWaitKey(int delay)

    cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。

     delay<=0时,函数cvWaitKey无限制的等待按键事件,所以显示图像时,需要在cvShowImage("**.bmp",image)后加上cvWaitKey(n)——n为小于等于0的数即可,程序停在显示函数处,不运行其他代码;否则,图像无法正常显示。

     delay>0时,延迟"delay"ms,在显示视频时这个函数是有用的,用于设置在显示完一帧图像后程序等待"delay"ms再显示下一帧视频;如果使用cvWaitKey(0)则只会显示第一帧视频。

    返回值:被按键的值,如果超过指定时间则返回-1。

    如果程序想响应某个按键,可利用if(cvWaitKey(1)==Keyvalue);

    二、带滚动条的AVI视频播放

    1、代码如下:

     1 /***********************************************************************************
     2 开发环境:opencv3.0.0 + vs2012旗舰版;win7正式版32位
     3 功能描述:播放AVI格式视频
     4 作者信息:博乐Bar
     5 开发时间:20150922
     6 ***********************************************************************************/
     7 #include <opencv2/opencv.hpp>
     8 
     9 int g_slider_position = 0;
    10 CvCapture * g_capture =NULL;
    11 
    12 void onTrackbarSlide(int pos){  //再拖动滚动条的时候,滚动条的位置会被作为int数字传入
    13     cvSetCaptureProperty(
    14         g_capture,
    15         CV_CAP_PROP_POS_FRAMES,
    16         pos
    17         );
    18 }
    19 
    20 int main(){
    21     cvNamedWindow("AVI播放_博乐Bar",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
    22     g_capture=cvCreateFileCapture("video.avi");//读取avi格式的影片
    23 
    24     int frames = (int) cvGetCaptureProperty(
    25             g_capture,
    26             CV_CAP_PROP_FRAME_COUNT
    27     );
    28 
    29     if(frames != 0){
    30         cvCreateTrackbar(  //进度条
    31             "Position",
    32             "AVI播放_博乐Bar",
    33             &g_slider_position,
    34             frames,
    35             onTrackbarSlide
    36             );
    37     }
    38 
    39     IplImage * frame;
    40     while(1){
    41         frame = cvQueryFrame(g_capture);//读取下一个影片帧率
    42         if(!frame)break;
    43         cvShowImage("AVI播放_博乐Bar",frame);
    44         char c=cvWaitKey(33); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
    45         if(c == 27)break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
    46     }
    47 
    48     cvReleaseCapture(&g_capture);
    49     cvDestroyWindow("AVI播放_博乐Bar");
    50 
    51     return 0;
    52 }
  • 相关阅读:
    Maven3-依赖
    Maven2-坐标
    使用VS Code开发Python
    WinDbg调试分析 asp.net站点 CPU100%问题
    asp.net core2 Centos上配置守护服务(Supervisor)
    asp.net core2部署到Centos上
    IntelliJ Error:Abnormal build process termination
    EF架构~codeFirst从初始化到数据库迁移
    office web apps 实现Wopi预览编辑
    office web apps安装教程
  • 原文地址:https://www.cnblogs.com/huanzxj/p/4829887.html
Copyright © 2011-2022 走看看