当前位置: 首页 > 知识库问答 >
问题:

在OpenCV/Python中设置摄影机参数

谷梁承宣
2023-03-14

我正在使用OpenCV(2.4)和Python(2.7.3)以及Thorlabs(DC1545M)的USB摄像头。

我正在视频流上做一些图像分析,我希望能够从我的视频流中更改一些相机参数。令人困惑的是,我能够改变一些相机属性,但不是全部,我不确定我做错了什么。

下面是使用Python中的cv2绑定的代码,我可以确认它是否运行:

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)

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

我的问题是:

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

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

注意:相机制造商提供的C代码说明了如何做到这一点,但我不是C方面的专家(从长远来看),我会欣赏任何基于python的解决方案。

提前感谢!


共有3个答案

商昆琦
2023-03-14

为了避免使用整数值来标识VideoCapture属性,可以在OpenCV 2.4和cv2中使用,例如,cv2.cv.CV_CAP_PROP_FPS。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')
后安民
2023-03-14

我在树莓皮上的openCV也有同样的问题。。。不知道这是否能解决你的问题,但对我有效的是

import time
import cv2


cap = cv2.VideoCapture(0)

cap.set(3,1280)

cap.set(4,1024)

time.sleep(2)

cap.set(15, -8.0)

你要用的时间可以不一样

葛玉堂
2023-03-14

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

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

还有一种可能性是,您的相机不支持您的请求-大多数USB摄像头价格便宜且简单。可能该参数不可用于修改。

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

 类似资料:
  • 问题内容: 如何访问我的IP摄像机流? 用于显示标准网络摄像头流的代码是 除了IP摄像机,我该如何做同样的事情? 我的系统: Python 2.7.14 OpenCV 2.4.9 Teledyne Dalsa Genie Nano XL相机 帮助将不胜感激 您可以将视频捕获对象用作 问题答案: 我回答了我自己的问题,报告了什么似乎是Python OpenCV中访问IP摄像机的 最全面的 总体过程。

  • 使用摄影机 安装PSP™专用的摄影机(选购品)后,可拍摄静止图像或影像。 若要使用此机能,需先准备另售的周边机器。有关周边机器的详情,请参阅各区域的官方网站。 您使用的PSP™ 必要的周边机器 PSP-1000/2000/3000系列 摄影机(PSP™主机专用) Memory Stick™ PSP-N1000系列 摄影机(PSP™主机专用) 转接线转换器 部分区域可能并未贩卖摄影机。 拍摄图像或影

  • 我已经安装了运动mmal覆盆子派和它的录制视频,每当我运行开始运动脚本: 然而,它会连续播放视频,直到我停止运动。 我想每10分钟拍一段5分钟的视频。我尝试了超时命令: 我能够运行脚本后,每1小时使用以下代码: 如何在每隔10分钟后运行此脚本?

  • 我正在开发一个应用程序,在这个应用程序中,我以纵向方向拍摄照片,问题是当我稍后检索图像时,它是横向方向的(图片已逆时针旋转90度)。我曾经在课下使用过,但这里每次都是0(零)。所以,我不知道怎么解决它。

  • 本教程中,我们将介绍一些摄像机的高级设置方法。 添加摄像机事件的语法 下面的代码中,通过 on() 方法添加事件。 app.on(THING.EventType.name, function (ev) { }); 其中,name 为 camera 事件的名称。 关于 camera 相关事件类型,可以点击查看 EventType。 摄像机相关事件示例 可以通过以下脚本对摄像机添加相关事件,可以按

  • 我正在尝试制作一个在实时相机上画画的应用程序。在这种情况下,我用xib创建了一个名为的类,其中所有与绘画相关的功能都在运行。 我正在添加到视图。视图添加正确。但是当我触摸设备屏幕时,应用程序无法绘制任何东西,日志显示以下错误 我添加子视图的代码是 请帮助我,如何在现场摄像机上画画!!! 提前谢谢。 编辑:在绘制视图中,我创建了图像视图,初始化如下 =[[UIImageView alloc]init