如何在 Python opencv 3.2.0 OSX El Capitan 中手动设置 Facetime 高清摄像头的曝光

Posted

技术标签:

【中文标题】如何在 Python opencv 3.2.0 OSX El Capitan 中手动设置 Facetime 高清摄像头的曝光【英文标题】:How to manually set exposure on a Facetime HD camera in Python opencv 3.2.0 OSX El Capitan 【发布时间】:2017-05-25 12:29:15 【问题描述】:

我想弄清楚如何在我用 Python 编写的 opencv 程序中手动设置我的 Facetime 高清摄像头的曝光。我正在使用 opencv 版本 3.2.0、python 2.7,并在 OSX El Capitan 上运行。

我正在编写一个程序,它将每隔 n 秒从网络摄像头拍摄一张照片并将其写入磁盘。根据我在文档中看到的内容,我想使用这种方法来设置相机的曝光。

cv2.VideoCapture.set(CV_CAP_PROP_EXPOSURE, value) → retval

经过一些修补和在线查看后,我发现我可以使用以下方法在我的 opencv 版本中访问该相机属性:

cv2.CAP_PROP_EXPOSURE

奇怪的是,在我实际拍摄照片的函数中,我可以看到默认的曝光值是0.0,然后当我用set方法去改变它的时候,我的曝光并没有改变再次检查该值。看来 set 方法根本不起作用。

这是我的功能:

def takePhoto():
    cam = cv2.VideoCapture(0)
    print(cam.get(cv2.CAP_PROP_EXPOSURE)) #this prints out 0.0
    cam.set(cv2.CAP_PROP_EXPOSURE, 0.5)
    print(cam.get(cv2.CAP_PROP_EXPOSURE)) #this also prints out 0.0, despite the use of set() in the line above
    s, im = cam.read() # captures image
    cv2.imwrite("test.jpg",im) # writes image test.jpg to disk
    cam.release()

只是这台相机不兼容手动曝光控制吗?我还在 OSX 中的一两个地方读到 opencv 不允许手动控制相机的属性。这就是这里的问题吗?还是我不正确地使用了 set 方法?我真的需要能够手动控制曝光,因为我的程序拍摄的照片一直曝光不足。

谢谢, 布赖恩

【问题讨论】:

【参考方案1】:

我没有 FacetimeHD 摄像头,但我想您需要使用

将曝光模式设置为手动(禁用自动曝光)

cam.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0)

【讨论】:

恕我直言,值可能因相机而异。

以上是关于如何在 Python opencv 3.2.0 OSX El Capitan 中手动设置 Facetime 高清摄像头的曝光的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 16.04 安装 opencv +contrib (3.2.0) + python 3.5

如何安装opencv

OpenCV 从入门到放弃虚拟机 Ubuntu16.04+ python安装opencv

在 python 3.6 上安装 opencv 3.2 的问题

Python调用OpenCV实现摄像头的运动检测

Ubuntu 16.04 源码安装 opencv 3.2.0