为什么用Python拍摄的网络摄像头图像太暗了?

Mar*_*oma 10 python opencv

我已经以各种方式展示了如何使用Python中的网络摄像头拍摄图像(请参阅如何使用Python拍摄相机图像?).您可以看到使用Python拍摄的图像比使用JavaScript拍摄的图像暗得多.怎么了?

图片示例

左边的图片是用http://martin-thoma.com/html5/webcam/拍摄的,右边的图片带有以下Python代码.两者都是在相同(受控)的闪电情况下拍摄的(外面是黑暗的,我只打开了一些电灯)和相同的网络摄像头.

在此输入图像描述

代码示例

import cv2
camera_port = 0
camera = cv2.VideoCapture(camera_port)
return_value, image = camera.read()
cv2.imwrite("opencv.png", image)
del(camera)  # so that others can use the camera as soon as possible
Run Code Online (Sandbox Code Playgroud)

为什么使用Python图像拍摄的图像比使用JavaScript拍摄的图像暗得多,我该如何解决?

(获得相似的图像质量;只是使其更亮可能无法修复它.)

请注意"我该如何修复它":它不需要是opencv.如果你知道有可能用另一个包(或没有包)用Python获取网络摄像头图像也没关系.

Luc*_*nso 9

我想你必须等待相机做好准备.

这段代码适合我:

from SimpleCV import Camera
import time
cam = Camera()
time.sleep(3)
img = cam.getImage()
img.save("simplecv.png")
Run Code Online (Sandbox Code Playgroud)

我从这个答案中得出了这个想法,这是我发现的最有说服力的解释:

某些设备上的前几帧是暗的,因为它是初始化相机后的第一帧,可能需要拉几帧才能让相机有时间自动调节亮度. 参考

因此,为了确保图像的质量,无论编程语言如何,在摄像机设备启动时都需要等待几秒钟和/或在拍摄图像之前丢弃几帧.


Kee*_*nan 8

面临同样的问题.我试过这个并且它有效.

import cv2
camera_port = 0 
ramp_frames = 30 
camera = cv2.VideoCapture(camera_port)
def get_image():
 retval, im = camera.read()
 return im 
for i in xrange(ramp_frames):
 temp = camera.read()

camera_capture = get_image()
filename = "image.jpg"
cv2.imwrite(filename,camera_capture)
del(camera)
Run Code Online (Sandbox Code Playgroud)

我认为这是关于将相机调整到光线.前者 的图像