OpenCV调用V4L相机记录

本文仅用于记录自己在使用opencv调用V4L过程中遇到的苦难。

确定OpenCV支持V4L

首先要确定OpenCV编译时支持了V4L,查看方法:

cout << getBuildInformatin() << endl;

输出opencv编译的信息,如下:

//可以发现V4L/V4L2这一项是OFF/ON。如果需要,重新编译OpenCV,将WITH_V4LWITH_LIBV4L设置为ON

设置曝光度等

VideoCapture cap(0 + CAP_V4L2);             // open v4l camera
if (cap.isOpened() == false){
    ROS_ERROR("Cannot open RGB camera.");
    return -1;
}
cap.set(CAP_PROP_AUTO_EXPOSURE, 0.25);      // set manul exposure
cap.set(CAP_PROP_EXPOSURE, -2);
cap.set(CAP_PROP_GAIN, 0.0);                // no gain

注意需要首先将CAP_PROP_AUTO_EXPOSURE设置为0.25,这个数表示手动曝光,否则用cap.get()函数获取曝光值时一直是inf。如果需要改回自动曝光,设置为0.75。至于为什么要设置成这两个数,一直没有查到。

下面就是CAP_PROP_EXPOSURE参数了,这个数值设置为多少呢?网上搜了下,这个数值是相机自身决定的,也就是opencv这边没有任何含义。我试了-1/-2…这种log的,不行。最后给0.0x这样一个小数可以改变曝光。但问题是从0到1增加过程中,曝光并不是线性增加的,而且也不知道这个数值的含义是什么。

20210918 破案了
之前的相机有问题。换了个相机,曝光值至少可以线性增加了。

猜你喜欢

转载自blog.csdn.net/tfb760/article/details/120355463
今日推荐