我有一个连接到我的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
感谢您的反馈!
答案 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
在:
在:
这被称为“直方图均衡化”,它的作用是将值均匀分布在直方图上。正如您在第二张图片中看到的那样,您可以恢复叶子,电线和围栏中的细节。
虽然它确实有很大帮助,但如果整张照片是白色的话,它真的不会做太多。这很可能是相机曝光图像的较暗区域。
如果你确实需要颜色,可以使用numpy.array和scipy.misc.imsave来查看是否可以使用颜色获取数组。
总结一下: