我正在尝试使用PIL paste()函数。我也想戴上口罩,但我不断收到此错误消息:


canvases[0].paste(mnist_images[i],
                  box=tuple(map(lambda p: int(round(p)), positions[i])), mask=mask)

该代码无需掩码即可工作。 Mask是一个numpy数组。我还没有看到带 mask 的示例,文档也不清晰。

https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.paste



我没有RGBA,如何使用"1""L"

最佳答案

掩码也必须是PIL Image。并没有明确提到in the docs,但是它指出:



因此,这暗示它们必须是PIL Image。从Pillow concepts page:



解决方法是,只需使用以下命令将您的面具变成PIL Image

mask = Image.fromarray(mask)

但是,请注意,对于二进制掩码,PIL希望掩码如上面所指出的那样在其中仅包含0和255(之间的值将混合)。因此,如果您的 mask 是一种numpy bool类型,则您需要执行以下操作:
mask = Image.fromarray(np.uint8(255*mask))

例如:
>>> import numpy as np
>>> import cv2
>>> from PIL import Image
>>> img = Image.fromarray(np.uint8(255*np.random.rand(400, 400, 3)))
>>> sub_img = Image.fromarray(np.uint8(255*np.ones((200, 200, 3))))
>>> mask = Image.fromarray(np.uint8(255*(np.random.rand(200, 200) > 0.7)))
>>> img.paste(sub_img, (0, 0), mask)

python - 如何在面膜上使用PIL糊剂?-LMLPHP

在这里,我在左上方的sub_img上粘贴了白色img,并从粘贴操作中屏蔽了约70%的像素,因此该区域中实际上只有约30%的像素显示为白色。

关于python - 如何在面膜上使用PIL糊剂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47723154/

10-12 23:33