aihot  2017-04-30 21:30:49  OpenCV |   查看评论   

 OpenCV学习笔记(三十)——解开VideoInput面纱highgui

最近做一个东西,摄像头使用的高清摄像头,采集出来的视频是D1格式(720*480)。使用VideoCapture发现速度很忙,网上的朋友说VideoCapture提供的读写功能采用VFW,效率低下且有些格式支持不好。而 可以看,开源伟大。

网上见过其他朋友写过2.2实现VideoInput的使用,我实验发现2.3中的使用方法基本没有变化。后面再把配套例程奉上,先把VideoInput类内的公有成员函数一一介绍一下,该类还有个相关的类是VideoDevice。包括控制是否在控制台输出信息开关setVerbose函数,打印出可用视频设备信息的函数listDevices,之后可以得到设备名函数getDeviceName,视频捕捉的回调函数设置函数setUseCallback,调整捕捉帧率的函数setIdealFramerate(默认30fps,可修改,但不能被保证准确,directshow会尝试一个邻近的帧率),防止设备休眠重新连接的函数setAutoReconnectOnFreeze,开启设备函数setupDevice,在setpuDevice之前可以设置视频制式,调用函数为setFormat,检测是否有新的帧函数isFrameNew,检测视频是否开启isDeviceSetup,获得数据的函数getPixels注意这里获得的数据时uchar型的指针),显示视频设置窗口函数showSettingsWindow,控制视频设置的相关函数有setVideoSettingFilter、setVideoSettingFilterPct、getVideoSettingFilter、setVideoSettingCamera、setVideoSettingCameraPct、getVideoSettingCamera,获得视频宽高信息的函数有getWidth、getHeight、getSize,停止设备函数stopDevice,重启设备函数restartDevice

讲了这么多函数,还是直接上代码说话吧,我这是找的VideoInput注释中的一个例程。

  1. // 创建一个videoInput对象
  2.     videoInput VI;  
  3.       
  4.     //   输出设备列表并返回发现的设备数量 
  5.     int numDevices = VI.listDevices();    
  6.       
  7.     int device1 = 0;  // 这可能是在listDevices中显示的任何deviceID
  8.     int device2 = 1;  // 这可能是在listDevices中显示的任何deviceID
  9.       
  10.     // 如果要以不同的帧速率捕获(默认为30)
  11.     // 在这里指定,你不能保证得到这个fps。
  12.     // VI.setIdealFramerate(dev, 60);      
  13.       
  14.     // 设置第一个设备 - 有很多选项:
  15.       
  16.     VI.setupDevice(device1);                          // 使用默认设置设置第一个设备
  17.     //VI.setupDevice(device1, VI_COMPOSITE);              // 
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV学习笔记(三十)——解开VideoInput面纱highgui

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]