USB微软网络摄像头 - 暴露图像 - 代码问题?

时间:2016-04-24 12:30:24

标签: python usb webcam raspberry-pi2

我有一个连接到我的Raspberry Pi 2B的微软USB网络摄像头,但有时候我有一张完全白色的照片,有时还有一些正常的照片。看图像,就像图片曝光过度一样。

请参见此处的图片:https://www.raspberrypi.org/forums/download/file.php?id=14467

可以通过对代码进行一些更改来解决这个问题吗?我已经在拍摄照片之前和之后添加了一段时间,但这不是解决方案 - time.sleep(t)

我目前使用的代码

import os
import pygame, sys
from pygame.locals import *
import pygame.camera

width = 1280
height = 720

#initialise pygame
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(width,height))

cam.start()
#setup window
windowSurfaceObj = pygame.display.set_mode((width,height),1,32)
pygame.display.set_caption('Camera')
#take a picture
time.sleep(4)
image = cam.get_image()
time.sleep(1)
cam.stop()

#display the picture
catSurfaceObj = image
windowSurfaceObj.blit(catSurfaceObj,(0,0))
pygame.display.update()

#save picture
pygame.image.save(windowSurfaceObj,'/home/pi/python/data/usbwebcamimage.jpg')

使用了usb cam:https://www.microsoft.com/hardware/en-gb/p/lifecam-cinema

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

老实说,我不认为这是可以通过代码修复的东西,因为你没有操纵图像。

我看着你正在使用的相机,它使用自动对焦,因此它可能聚焦在较暗的区域,并通过使图像更亮来进行补偿。看一下所谓的自动曝光:http://www.webopedia.com/TERM/A/automatic_exposure_mode.html

可以通过代码修复吗?可能,取决于您需要相机的用途。

如果您不需要颜色,则使用以下代码会导致曝光有所下降。

代码:

def histeq(im, nbr_bins=256):
    """ Histogram equalization of a grayscale image. """

    imhist, bins = np.histogram(im.flatten(), nbr_bins, normed=True)

    cdf = imhist.cumsum()
    cdf = 255 * cdf / cdf[-1]

    im2 = np.interp(im.flatten(), bins[:-1], cdf)

    return im2.reshape(im.shape), cdf


def lowerImage(image):

    image = np.array(Image.open(image).convert("F"))

    newimage, cdf = histeq(image)

    FinalImage = Image.fromarray(newimage).convert("RGB")

    FinalImage.save("equal.jpg")  # Change the name to whatever you want to

在:

Your Image

在:

Output Image

这被称为“直方图均衡化”,它的作用是将值均匀分布在直方图上。正如您在第二张图片中看到的那样,您可以恢复叶子,电线和围栏中的细节。

虽然它确实有很大帮助,但如果整张照片是白色的话,它真的不会做太多。这很可能是相机曝光图像的较暗区域。

如果你确实需要颜色,可以使用numpy.array和scipy.misc.imsave来查看是否可以使用颜色获取数组。

总结一下:

  1. 它可能只是硬件,所以试着看看你是否可以手动曝光相机。
  2. 如果照片曝光过度,请使用上面的代码。