python - 在 OpenCV/Python 中设置相机参数

标签 python opencv camera

我将 OpenCV (2.4) 和 Python (2.7.3) 与 Thorlabs (DC1545M) 的 USB 摄像头一起使用。

我正在对视频流进行一些图像分析,我希望能够从我的视频流中更改一些相机参数。令人困惑的是,我可以更改某些相机属性,但不能更改所有属性,而且我不确定自己做错了什么。

这是代码,在 Python 中使用 cv2 绑定(bind),我可以确认它运行:

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(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 1024)
cap.set(cv2.cv.CV_CAP_PROP_EXPOSURE, 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)

(请注意,正如评论者 Markus Weber 在下面指出的那样,在 OpenCV 4 中,您必须从属性名称中删除“CV”前缀,例如 cv2.CV_CAP_PROP_FRAME_HEIGHT -> cv2.CAP_PROP_FRAME_HEIGHT)

我的问题是:

是否可以通过 python/opencv 设置相机曝光时间(或其他相机参数)?

如果没有,我将如何设置这些参数?

注意:相机制造商提供的 C++ 代码显示了如何执行此操作,但我不是 C++ 专家(从长远来看),我希望任何基于 python 的解决方案。

提前致谢!

最佳答案

并非所有相机都支持所有参数 - 实际上,它们是 OpenCV 库中最麻烦的部分之一。每种相机类型——从安卓相机到 USB 相机再到专业相机,都提供了不同的界面来修改其参数。 OpenCV 代码中有许多分支可以支持尽可能多的分支,但当然并不是所有的可能性都被涵盖。

您可以做的是调查您的相机驱动程序,为 OpenCV 编写补丁并将其发送到 code.opencv.org。这样别人就会喜欢你的工作,就像你喜欢别人的一样。

您的相机也有可能不支持您的要求 - 大多数 USB 相机既便宜又简单。也许该参数无法修改。

如果您确定相机支持给定参数(您说相机制造商提供了一些代码)并且不想弄乱 OpenCV,您可以使用 boost::python 将该示例代码包装在 C++ 中,以使其可用在 Python 中。然后,尽情使用吧。

关于python - 在 OpenCV/Python 中设置相机参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420748/

相关文章:

python - 应该定义密集层输入的最后一个维度。没有发现。收到完整的输入形状 : <unknown>

Python 2.7 OpenCV : Extracting features/descriptors from image coordinates

嵌入式应用

c - 如何从c语言程序中调用LSD(LineSegmentDetector)?

c++ - 如何在 OpenGL 中使用鼠标在相机周围移动?

python - Django:在 form.clean() 中返回消息

python - 如何计算Python 3中字典中每组值的数量?

Androidcamera2自定义白平衡

ios - 如何在 iOS 中同时录制前后摄像头的视频

python - 面向对象编程实践——概念/实体转化为对象