RoboMaster机甲大师——视觉组——摄像头的VideoCapture读取中cvGetCaptureProperty参数大全

FOR THE SIGMA
FOR THE GTINDER
FOR THE ROBOMASTER

简介:

本篇文章主要补充在Opencv中用VideoCapture进行图像处理时,摄像头的相关参数运用由于博主并非专业人士(目前暂时没有从事相关专业的决定),可能在叙述时会有一些相关专业知识错误的发生,希望读者可以反馈,博主会接收建议并修改错误,谢谢。

操作系统版本

Ubuntu16.04 http://www.ubuntu.org.cn/download/desktop 桌面版ubuntu16.04 下载
Windows10

所需器件

能用的任意一款USB摄像头(能用指的是可以调参数的摄像头)

参考文献

https://baike.baidu.com/item/cvGetCaptureProperty/1637973?fr=aladdin
http://blog.sina.com.cn/s/blog_53bb9c920100y7gw.html

内容:

CV_CAP_PROP_DC1394_OFF = -4, //关闭功能(不手动或自动控制)
CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //当用户设置功能值时自动设置
CV_CAP_PROP_DC1394_MODE_AUTO = -2, //
CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1,
CV_CAP_PROP_POS_MSEC =0, //影片目前位置,为毫秒数或者视频获取时间戳
CV_CAP_PROP_POS_FRAMES =1,  //将被下一步解压/获取的帧索引,以0为起点
CV_CAP_PROP_POS_AVI_RATIO =2, //视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH =3, //视频流中的帧宽度
CV_CAP_PROP_FRAME_HEIGHT =4, //视频流中的帧高度
CV_CAP_PROP_FPS =5, //帧率
CV_CAP_PROP_FOURCC =6, //表示codec的四个字符
CV_CAP_PROP_FRAME_COUNT =7, // 视频文件中帧的总数
CV_CAP_PROP_FORMAT =8, //格式
CV_CAP_PROP_MODE =9, 
CV_CAP_PROP_BRIGHTNESS =10, //亮度
CV_CAP_PROP_CONTRAST =11, //对比度
CV_CAP_PROP_SATURATION =12, //饱和度
CV_CAP_PROP_HUE =13, //色调
CV_CAP_PROP_GAIN =14,
CV_CAP_PROP_EXPOSURE =15, //曝光
CV_CAP_PROP_CONVERT_RGB =16, //RGB变换器
CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17, //白平衡蓝平衡
CV_CAP_PROP_RECTIFICATION =18, //矫正
CV_CAP_PROP_MONOCROME =19, //恢复或者设置摄像头属性
CV_CAP_PROP_SHARPNESS =20, //清晰度
CV_CAP_PROP_AUTO_EXPOSURE =21, //通过相机进行曝光控制
// 用户可以调整参考级别
// 使用此功能
CV_CAP_PROP_GAMMA =22, //伽马
CV_CAP_PROP_TEMPERATURE =23, //温度
CV_CAP_PROP_TRIGGER =24, //触发
CV_CAP_PROP_TRIGGER_DELAY =25, //触发延迟
CV_CAP_PROP_WHITE_BALANCE_RED_V =26, //白平衡(红)
CV_CAP_PROP_MAX_DC1394 =27,
CV_CAP_PROP_AUTOGRAB =1024, // 仅适用于HighGui类CVCapture_Android的属性
CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // 棘手的属性,实际确实返回cpnst char*
// OpenNI 文件夹生成器
CV_CAP_OPENNI_DEPTH_GENERATOR = 0,
CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 31,
CV_CAP_OPENNI_GENERATORS_MASK = 1 << 31,
// Properties of cameras available through OpenNI interfaces
CV_CAP_PROP_OPENNI_OUTPUT_MODE = 100,
CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm
CV_CAP_PROP_OPENNI_BASELINE = 102, // in mm
CV_CAP_PROP_OPENNI_FOCAL_LENGTH = 103, // in pixels
CV_CAP_PROP_OPENNI_REGISTRATION_ON = 104, // flag
CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE,
CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE,
CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH,
CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION_ON,
// Properties of cameras available through GStreamer interface
CV_CAP_GSTREAMER_QUEUE_LENGTH= 200, // default is 1
CV_CAP_PROP_PVAPI_MULTICASTIP = 300 // ip for anable multicast master mode. 0 for disable multicast
};

PS:有时候这个函数在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。

http://blog.sciencenet.cn/blog-1858837-859032.html
==openCV中cvGetCaptureProperty()的缺陷 ==

openCV中对视频的属性获取的函数 cvGetCaptureProperty() 不能完全信赖,编程中发现函数获得的帧数等属性和循环播放累加得到的不同。
查阅资料 发现openCV的函数是通过获取视频头文件的形式获得,但有时视频头文件不吻合,导致出问题,所以恰当的方法是循环获得视频的帧数灯信息。