我对使用python和图像处理非常陌生。
我有一个图像,我想放在另一个图像之上。图像是黑白的,我只想要黑色的部分被放置。我想移除白色的部分。

我基本上想要创建一个水印,我可以放置在任何地方的图像。下面是我想要将水印放在上面的一个示例图像。

这个博客文章讨论了如何在图像上制作水印。但我不想要整个图像,只是我水印的黑色部分。
谢谢你的帮助。
发布于 2022-09-12 01:09:29
您可以使用PIL (或cv2和numpy)来制作它。
因为你有黑白图像,所以你可以复制它,反转它,并把它作为阿尔法通道,以获得透明度而不是白色像素。
接下来,您可以将其resize为预期大小(我使用第二个图像的大小),也可以在选定的位置对第二个图像进行paste (我使用(0,0)),它将放置在没有透明像素的情况下。图像不一定要大小相同。
您可以使用其他功能进行其他修改,并获得不同的效果。有些函数可能需要使用相同大小的图像。
医生:Pillow.Image
from PIL import Image, ImageChops
import PIL
print(PIL.__version__)
# --- load ---
img1 = Image.open('Z9yFZ.jpg')
img2 = Image.open('Uh4LU.jpg')
# --- alpha channel ---
R,G,B = img1.split()
gray = img1.convert('L')
alpha = ImageChops.invert(gray)
img1 = Image.merge('RGBA', [R,G,B,alpha])
# --- resize ---
img1.thumbnail(img2.size)
# --- merge ---
img2.paste(img1, (0,0), img1) # second `img1` as `mask`
img2.show()
# --- save ---
img2.save('result.jpg')结果:

编辑:
我从未测试过它,但是模块魔杖 (它使用ImageMagick)有函数水印
编辑:
我创建了这样的代码:
from wand.image import Image
from wand.display import display
from wand.color import Color
import wand
print(wand.version.VERSION)
print(wand.version.MAGICK_VERSION)
# --- load ---
img1 = Image(filename='Z9yFZ.jpg') # has to use `filename=`
img2 = Image(filename='Uh4LU.jpg') # has to use `filename=`
# --- alpha channel ---
#img1.alpha_channel = 'background'
#color = Color('#FFFFFF') # white
color = Color('white') # white
#color = Color('#000000') # black
#color = Color('black') # black
#color = img1.background_color
ten_percent = int(65535*0.1) # remove similar colors (65535 = 2^16-1)
img1.transparent_color(color, alpha=0.0, fuzz=ten_percent)
# --- resize ---
w, h = img2.size
img1.transform(resize=f"{w}x{h}>")
# --- merge ---
img2.watermark(img1, left=0, top=0, transparency=0.5) # transparent, looks good even without `fuzz=ten_percent`
#img2.composite(img1, left=0, top=0) # not transparent, looks better with `fuzz=ten_percent`
display(img2)
# --- save ---
img2.save(filename='result.jpg') # has to use `filename=`

https://stackoverflow.com/questions/73683026
复制相似问题