Я работаю с камерой ПС-Глаз-3, libusb, Драйвер PSEye, OpenCV 3.4.2 и Visual Studio 2015 / C++ в Windows 10.
Я могу установить любое значение экспозиции камеры с помощью этого кода:
cv::VideoCapture *cap;
...
cap = new cv::VideoCapture(0);
cap->set(CV_CAP_PROP_EXPOSURE, exposure); // exposure = [0, 255]
Теперь я бы тоже хотел перейти на автоэкспозицию. Как установить камеру в режим автоэкспозиции?
Я пробовал следующее:
cap->set(CV_CAP_PROP_EXPOSURE, 0); // not working
cap->set(CV_CAP_PROP_EXPOSURE, -1); // not working
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, 1); // not working, exposure stays fixed
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, 0); // not working, exposure stays fixed
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, -1); // not working, exposure stays fixed
Какая-то идея?





Попробуйте cap-> set (CV_CAP_PROP_AUTO_EXPOSURE, X); где X - значение, зависящее от камеры, например 0,25 или 0,75. По аналогичной проблеме см. Обсуждение: https://github.com/opencv/opencv/issues/9738
Это зависит от используемого API захвата. Если вы используете CAP_V4L2, тогда для автоматической экспозиции установлено значение «включено» со значением 3 и «выключено» со значением 1.
Все устанавливаемые значения можно найти, набрав v4l2-ctl -l в терминале.
Я думаю, что для OpenCV <4.0 api по умолчанию - CAP_GSTREAMER, а для автоматической экспозиции установлено значение «включено» со значением 0,75 и «выключено» со значением 0,25.
Я думаю, наконец, я нашел решение, по крайней мере, для своей проблемы,
capture = cv2.VideoCapture(id)
capture.set(cv2.CAP_PROP_AUTO_EXPOSURE, 3) # auto mode
capture.set(cv2.CAP_PROP_AUTO_EXPOSURE, 1) # manual mode
capture.set(cv2.CAP_PROP_EXPOSURE, desired_exposure_value)
Мне нужно сначала установить auto_exposure на 3 (автоматический режим)
тогда мне нужно установить его на 1 (ручной режим)
а затем я могу установить ручную экспозицию
вы также можете установить настройки с помощью оболочки
перечислить доступные варианты
video_id=1
v4l2-ctl --device /dev/video$video_id -l
def set_manual_exposure(dev_video_id, exposure_time):
commands = [
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_auto=3"),
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_auto=1"),
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_absolute = "+str(exposure_time))
]
for c in commands:
os.system(c)
# usage
set_manual_exposure(1, 18)