在树莓派上使用PIL将一张图片叠加到另一张上

1 投票
1 回答
2653 浏览
提问于 2025-04-18 03:23

我正在使用树莓派和一个摄像头模块。我写了一个脚本,让摄像头拍了一张照片。

现在,在我拍完照片后,我需要一个Python脚本,把刚拍的照片和另一张图片(比如水印或标志)合成在一起。我试着使用这个链接:http://pillow.readthedocs.org/en/latest/handbook/tutorial.html,但我不知道该用哪些命令或语法。

编辑:
我的Python脚本... 它拍了一张带时间的照片。

from datetime import datetime
zeit = datetime.now()
zeit = "%s-%s-%s-%s:%s:%s" % (zeit.year,zeit.day,zeit.month,zeit.hour,zeit.minute,zeit.second)
Bildformat = ".png"

Bildname = "Bild-" + zeit + Bildformat

from subprocess import call

#call (["raspistill -o " + Bildname + " -t 1 -n"], shell=True)
call (["raspistill -o /home/pi/cam_project/Bilder/" + Bildname + " -t 1 -n"], shell=True)

编辑 2:
谢谢大家的回答。这是我的完整代码。我想添加一些像教程中提到的内容(请查看上面的链接)。我的主要想法是,摄像头拍一张照片,然后PIL库(见链接)抓取这张照片,并把这张新拍的照片和另一张之前制作好的图片(在同一个文件夹里,像水印或标志)合成在一起。

大概是这样的:

from __future__ import print_function   
from PIL import Image

img_taken = Image.open("/home/pi/cam_project/Bilder/" + Bildname + "")

# This is the picture with the date as name 
    
img_watermark/logo = Image.open("home/pi/cam_project/Bilder/watermark.png
    
    # This is the logo


# Then I want something like: paste img_watermark/logo  in img_taken

如果你点击我上面发的链接,向下滚动到“滚动图像”部分,在代码后面他们说:

对于更高级的技巧,paste方法还可以接受一个透明度蒙版作为可选参数。在这个蒙版中,值255表示在该位置粘贴的图像是不透明的(也就是说,粘贴的图像应该原样使用)。值0表示粘贴的图像是完全透明的。介于两者之间的值表示不同程度的透明度。


我想要的输出是处理过的图片(带有标志/水印)。

1 个回答

4

我觉得这个方法对你有用。它可以处理你使用的水印图片中的透明度,还能让水印图片变得更亮,这样就不那么明显了。

import PIL.Image
import PIL.ImageEnhance

# images
base_path = 'base.jpg'
watermark_path = 'watermark.png'
base = PIL.Image.open(base_path)
watermark = PIL.Image.open(watermark_path)

# optional lightness of watermark from 0.0 to 1.0
brightness = 0.5
watermark = PIL.ImageEnhance.Brightness(watermark).enhance(brightness)

# apply the watermark
some_xy_offset = (10, 20)
# the mask uses the transparency of the watermark (if it exists)
base.paste(watermark, some_xy_offset, mask=watermark)
base.save('final.png')
base.show()

公共领域的猫咪图片

(公共领域的猫咪图片)

撰写回答