如何在 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
所以我的这段代码几乎可以正常工作,但是当我只希望它出现在相机预览中时,覆盖层接管了整个 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()
图片如下。覆盖是整个屏幕上的垂直线,但应该只在左上角的部分。
对于遇到此问题的任何人,实时预览和叠加使用不同的渲染器独立运行。您已通过
指定预览的位置windowcamera.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