配置在新的OCV 2.4.3的相机性能(Configuring camera properties

2019-07-20 09:38发布

我可能只是谷歌搜索错误的,但我不能找到出路(读取功能),以改变在新的开放CV相机的性能。 我需要禁用自动曝光和相机的自动增益
是否可能?

Answer 1:

这是一个老问题,但我想一个解决方案添加到这一点。

OpenCV的调用底层为v41方法查询帧,设置/获取相机性能等而问题是,调用是不完整的。 也由于某些原因,库调用为v41方法,而不是用v412的。 类似的问题在这里 。 它是通过修改代码OpenCV的解决,它似乎。

我还检查是否OpenCV的可以设置用v412支持样“手动曝光”,“或曝光自动优先”的属性。 这是不可能的。 我打得四处用v412来解决这个问题:

#include <libv4l2.h>
#include <linux/videodev2.h>
#include <sys/ioctl.h>
#include <fcntl.h>

// open capture
int descriptor = v4l2_open("/dev/video0", O_RDWR);

// manual exposure control
v4l2_control c;
c.id = V4L2_CID_EXPOSURE_AUTO;
c.value = V4L2_EXPOSURE_MANUAL;
if(v4l2_ioctl(descriptor, VIDIOC_S_CTRL, &c) == 0)
    cout << "success";

// auto priority control
c.id = V4L2_CID_EXPOSURE_AUTO_PRIORITY;
c.value = 0;
if(v4l2_ioctl(descriptor, VIDIOC_S_CTRL, &c) == 0)
    cout << "success";

然后,您可以用OpenCV的工作。

相机控制的完整列表在这里 。



Answer 2:

因此,有你的VideoCapture:

VideoCapture cap(0);

现在你可以尝试设置或获取属性:

//may work or not, highly driver/impl specific.
cap.set(CV_CAP_PROP_AUTO_EXPOSURE, 0 ); 
double exposure = cap.get(CV_CAP_PROP_AUTO_EXPOSURE); 

有时你甚至可以存取权限的驱动程序配置对话框是这样的:

cap.set(CV_CAP_PROP_SETTINGS , 1 );

这些常数是在highgui_c.h,周围升333



Answer 3:

您可以使用OpenCV的API来做到这一点使用VideoCapture ::设置() 。 下面是如何在Python手动设置曝光的例子:

import cv2

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_EXPOSURE,-4)

while(True):
    ret, frame = cap.read()

    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

下面是我对曝光时间为每一帧的音符。 虽然我相信他们是照相机专属,他们给你一个好主意。

-1  640 ms
-2  320 ms
-3  160 ms
-4  80 ms
-5  40 ms
-6  20 ms
-7  10 ms
-8  5 ms
-9  2.5 ms
-10 1.25 ms
-11 650 µs
-12 312 µs
-13 150 µs

同样的功能有增益和许多其他值的设置,虽然我还没有尝试过。

在多一点讨论
设置在OpenCV的手动曝光



文章来源: Configuring camera properties in new OCV 2.4.3