我正在尝试使用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)
在这里,我在左上方的
sub_img
上粘贴了白色img
,并从粘贴操作中屏蔽了约70%的像素,因此该区域中实际上只有约30%的像素显示为白色。关于python - 如何在面膜上使用PIL糊剂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47723154/