Настройка параметров камеры в OpenCV / Python



Я использую OpenCV (2.4) и Python (2.7.3) с USB-камерой от Thorlabs (DC1545M).



Я делаю некоторый анализ изображений в видеопотоке, и я хотел бы иметь возможность изменить некоторые параметры камеры из моего видеопотока. Смущает то, что я могу изменить некоторые свойства камеры, но не все из них, и я не уверен, что я делаю неправильно.



вот код, используя привязки cv2 в Python, и я могу подтвердить, что это работает:



import cv2


#capture from camera at location 0
cap = cv2.VideoCapture(0)
#set the width and height, and UNSUCCESSFULLY set the exposure time
cap.set(3,1280)
cap.set(4,1024)
cap.set(15, 0.1)

while True:
ret, img = cap.read()
cv2.imshow("input", img)
#cv2.imshow("thresholded", imgray*thresh2)

key = cv2.waitKey(10)
if key == 27:
break


cv2.destroyAllWindows()
cv2.VideoCapture(0).release()


Для справки, первый аргумент в cap.set () команда относится к перечислению свойств камеры, перечисленных ниже:





0. CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
1. CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
2. CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file
3. CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
4. CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
5. CV_CAP_PROP_FPS Frame rate.
6. CV_CAP_PROP_FOURCC 4-character code of codec.
7. CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
8. CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
9. CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
10. CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
11. CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
12. CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
13. CV_CAP_PROP_HUE Hue of the image (only for cameras).
14. CV_CAP_PROP_GAIN Gain of the image (only for cameras).
15. CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
16. CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
17. CV_CAP_PROP_WHITE_BALANCE Currently unsupported
18. CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)


мои вопросы:



можно ли установить время экспозиции камеры (или другие параметры камеры) через python/opencv?



если нет, то как бы я мог установить эти параметры?



Примечание: есть C++ код предоставляется производитель камеры показывает, как это сделать, но я не эксперт (по большому счету) в C++ и был бы признателен за любое решение на основе python.



спасибо заранее!

2791   5  

5 ответов:

не все параметры поддерживаются всеми камерами-на самом деле, они являются одной из самых проблемных частей библиотеки OpenCV. Каждый тип камеры-от камер android до USB-камер до профессиональных-предлагает различный интерфейс для установки своих параметров. И есть много ветвей в коде OpenCV, чтобы поддержать как можно больше из них, но, конечно, не все возможности охвачены.

Что вы можете сделать, это исследовать драйвер камеры, сделать патч для OpenCV и отправить это к code.opencv.org таким образом, другие будут наслаждаться вашей работой, так же, как вы наслаждаетесь другими.

существует также возможность того, что ваша камера не поддерживает ваш запрос - большинство USB-камер дешевы и просты. Возможно, этот параметр просто недоступен для изменений.

Если вы уверены, что камера поддерживает данный параметр (вы говорите, что производитель камеры предоставляет некоторый код) и не хотите возиться с OpenCV, вы можете обернуть этот пример кода в C++ с помощью boost:: python, чтобы сделать его доступным в Python. Затем пользоваться ею.

чтобы избежать использования целочисленных значений для определения VideoCapture свойства, можно использовать, например, cv2.cv.CV_CAP_PROP_FPS в OpenCV 2.4 и cv2.CAP_PROP_FPS в OpenCV 3.0. (См. также комментарий Стефана ниже.)

здесь функция полезности, которая работает как для OpenCV 2.4, так и для 3.0:

# returns OpenCV VideoCapture property id given, e.g., "FPS"
def capPropId(prop):
  return getattr(cv2 if OPCV3 else cv2.cv,
    ("" if OPCV3 else "CV_") + "CAP_PROP_" + prop)

OPCV3 устанавливается ранее в моем коде утилиты следующим образом:

from pkg_resources import parse_version
OPCV3 = parse_version(cv2.__version__) >= parse_version('3')

У меня была такая же проблема с openCV на Raspberry Pi... не знаю, Может ли это решить вашу проблему, но то, что сработало для меня было

import time
import cv2


cap = cv2.VideoCapture(0)

cap.set(3,1280)

cap.set(4,1024)

time.sleep(2)

cap.set(15, -8.0)

время, вы должны использовать может быть разное

Я также не смог исправить проблему OpenCV, но обходной путь video4linux (V4L2) работает С OpenCV при использовании Linux. По крайней мере, это делает на моем Raspberry Pi с Rasbian и моей дешевой веб-камерой. Это не так прочно, легко и портативно, как вам хотелось бы, но для некоторых ситуаций это может быть очень полезно.

убедитесь, что у вас установлено приложение v4l2-ctl, например, из пакета Debian v4l-utils. Чем запустить (перед запуском python приложение, или изнутри) команда:

v4l2-ctl -d /dev/video1 -c exposure_auto=1 -c exposure_auto_priority=0 -c exposure_absolute=10

он перезаписывает время затвора камеры в ручные настройки и изменяет время затвора (в МС?) с последним параметром (в данном примере) 10. Чем ниже это значение, тем темнее изображение.

Если кому-то все еще интересно, какое значение в CV_CAP_PROP_EXPOSURE может быть:

зависит. Для моей дешевой веб-камеры я должен ввести желаемое значение напрямую, например 0.1 для 1 / 10s. для моей дорогой промышленной камеры мне нужно ввести -5, чтобы получить время экспозиции 2^-5s = 1/32s.

Comments

    Ничего не найдено.