如何在 picamera 预览上放置叠加层

How to place overlay on top of picamera preview

所以我的这段代码几乎可以正常工作,但是当我只希望它出现在相机预览中时,覆盖层接管了整个 HDMI 输出(全屏)window。

import picamera
import time

image_folder="../images/"

with picamera.PiCamera() as camera:
                camera.start_preview()
                camera.preview.window=(0,0, 750, 400)
                camera.preview.fullscreen=False

                # Overlay
                img = Image.open(image_folder+'cam_overlay.png')
                pad = Image.new('RGBA', (
                    ((img.size[0] + 31) // 32) * 32,
                    ((img.size[1] + 15) // 16) * 16,
                    ))
                pad.paste(img, (0, 0))
                o = camera.add_overlay(pad.tobytes(), size=img.size)
                o.alpha = 32
                o.layer = 3
          
                time.sleep(10)
                camera.stop_preview()

图片如下。覆盖是整个屏幕上的垂直线,但应该只在左上角的部分。

对于遇到此问题的任何人,实时预览和叠加使用不同的渲染器独立运行。您已通过

指定预览的位置window
camera.preview.window=(0,0, 750, 400)

但没有为叠加层指定相同的内容window。这可以使用相同的语法来完成,但引用覆盖本身

# add the overlay
o = camera.add_overlay(pad.tobytes(), size=img.size)
o.fullscreen = False

# specify the position of the overlay window to match the preview
o.window = (0, 0, 750, 400)
o.alpha = 32
o.layer = 3