zoukankan      html  css  js  c++  java
  • 基于OpenCV之视频读取,处理和显示框架的搭建(一)

    主要包括以下内容:

          1.使用的主要函数的说明。

          2.两个实例:视频读取和显示。搭建视频读取和处理框架,调用canny函数提取边缘并显示。

          3.一些注意事项和代码说明。

    一.使用的主要函数

    1.延时函数cv::waitKey

    函数原型

              intwaitKey(int delay=0)

    参数说明:

              1). delay<=0代表相对无限等待一个按键;delay>0的时候,函数延时delay毫秒(milliseconds)。但延时是相对的最小延时,        延时不会超过操作系统的a minimumtime between switching threads。在延时的时候,如有按键读入,那么返回按键的ASCII编          码;否则返回-1;

              2).至少应该有一个窗口正在使用(Active)。如果有多个,那么延时的对象是所有有效的窗口。

    使用范例:

              1).if(waitKey(200)>=0) return true;//如果在200毫秒内有按键时间,则返回

              2).if (char(waitKey(200))=='q') return true;//如果在200毫秒内按下了‘q’键,则返回

    2.返回视频文件的性质函数VideoCapture::get()

            视频文件的性质包括比如帧率,下一帧的序列号等等

    函数原型:C++: doubleVideoCapture::get(int propId)

    参数说明:

            参数为实际为枚举类型,如下图


    使用范例

               VideoCapture capture(“traffic.avi”);

               Long count=capture.get(CV_CAP_PROP_FRAME_COUNT)//返回视频文件的帧总数。

    3.判断视频文件是否打开成功函数VideoCapture::Isopen()

    二.使用实例

    1.实例1:基本视频文件的读取和显示

    2.实例2:搭建视频文件读取处理显示框架,调用canny算子提取边缘

    三.注意事项和代码说明

              1.看实例:2的代码,在头文件VideoProc.h中定义了视频处理类VideoProc。请注意成员函数指针*process的定义void(*process)(Mat&,Mat&)。这里定义回调处理函数指针,其类型为指向返回类型为void参数为(Mat&,Mat&)的函数,成员函数void setProcess(void (*)(Mat&,Mat&))对这个指针具体化,但是请注意:在函数声明时形参也被设置同类型的函数指针。

               在主函数中,使用了sv.setProcess(canny)使回调函数指针指向canny,而在canny函数中,对单张灰度图像(彩色图像先灰度化)使用Canny算子提取了边缘并返回二值化后的图像。也就是说,视频处理的实质是单张图片的处理;而视频处理的多态性体现在函数指针指向不同的处理函数。

             2.实例二实现的目标如下:设置某个帧index即帧序列号(本文中为25),处理过程将在这里暂停,但是按任意键后,处理过程将继续。在整个处理过程中,按下任意键,处理过程将结束。

             3.这里的按键事件,并不是意味在命令行窗口或者DOS窗口输出某个字符,而是当光标停留在所创建的窗口上的时候的按键事件。

             4.成员函数setcallProcesss(false);设置是否调用处理函数标志位。若设为false->callIt=0,意味输入输出文件一样,即视频文件没有经过处理。设为true->callIt=1,则输出文件经过了处理。

             5.注意延时参数设置,假设源视频文件的帧率为FPS,设置延时参数1000/FPS,则经过处理后的视频以相同的帧率播放,注意延时参数为毫秒级,故分子为1000。



    @工程及源码点击此处下载


  • 相关阅读:
    哥哥牟:诺拉的死亡是由于寻找食物的粪便!
    Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码
    Centos6.5下一个Ceph存储集群结构
    linux input如何固定设备event handler
    sizeof运营商
    【小言的设计模式】类之间的关系
    2015第11周五
    2015第11周四~代发公司招聘信息
    2015第11周三
    2015第11周二
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393155.html
Copyright © 2011-2022 走看看