覆盆子Pi相机透明图像叠加

时间:2015-03-16 22:08:50

标签: python image camera raspberry-pi

是否可以在pi相机预览上叠加透明(png或gif)图像?

我找到了一些代码,但它产生了白色背景

import picamera

from PIL import Image
from time import sleep

with picamera.PiCamera() as camera:

camera.start_preview()

# Load the arbitrarily sized image
img = Image.open('lol.gif')
# Create an image padded to the required size with
# mode 'RGB'
pad = Image.new('RGB', (
    ((img.size[0] + 31) // 32) * 32,
    ((img.size[1] + 15) // 16) * 16,
    ))
# Paste the original image into the padded one
pad.paste(img, (0, 0))

# Add the overlay with the padded image as the source,
# but the original image's dimensions
o = camera.add_overlay(pad.tostring(), size=img.size)
# By default, the overlay is in layer 0, beneath the
# preview (which defaults to layer 2). Here we make
# the new overlay semi-transparent, then move it above
# the preview
o.alpha = 255
o.layer = 3

# Wait indefinitely until the user terminates the script
while True:
    sleep(1)

4 个答案:

答案 0 :(得分:1)

'RGB'更改为'RGBA'

我没有条件来测试它,但我想这会解决你的问题。

答案 1 :(得分:1)

诀窍在Image.paste函数中。第三个参数是用于粘贴图像的蒙版,因为透明像素会产生结果,只是将您粘贴的相同图像作为蒙版传递并执行操作:

pad.paste(img, (0, 0), img)

正如文件所说:

  

请注意,如果粘贴“RGBA”图像,则会忽略Alpha波段。您可以使用与源图像和蒙版相同的图像来解决此问题。

希望它有所帮助!

答案 2 :(得分:0)

我有类似的问题,你需要将图像/图片保存为RGB,然后才能使用。

答案 3 :(得分:0)

同时使用前两个建议中的都有效。

Image.new('RGBA',... 调用

中,将“ RGB”更改为“ RGBA”

然后将第二个“ img”添加到 pad.paste(img,(0,0),img)调用中。

同时做这两项,它就像一种魅力。