Setting Camera Parameters in OpenCV/Python

By : Mike
Source: Stackoverflow.com
Question!

I am using OpenCV (2.4) and Python (2.7.3) with a USB camera from Thorlabs (DC1545M).

I am doing some image analysis on a video stream and I would like to be able to change some of the camera parameters from my video stream. The confusing thing is that I am able to change some of the camera properties but not all of them, and I am unsure of what I am doing wrong.

Here is the code, using the cv2 bindings in Python, and I can confirm that it runs:

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()

For reference, the first argument in the cap.set() command refers to the enumeration of the camera properties, listed below:

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)

My questions are:

Is it possible to set camera exposure time (or the other camera parameters) through python/opencv?

If not, how would I go about setting these parameters?

Note: There is C++ code provided by the camera manufacturer showing how to do this, but I'm not an expert (by a long shot) in C++ and would appreciate any python-based solution.

Thanks in advance!

By : Mike


Answers

If anyone is still wondering what the value in CV_CAP_PROP_EXPOSURE might be:

Depends. For my cheap webcam I have to enter the desired value directly, e.g. 0.1 for 1/10s. For my expensive industrial camera I have to enter -5 to get an exposure time of 2^-5s = 1/32s.



This video can help you solving your question :)
By: admin