Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在图像上绘制多个透明遮罩_Python_Numpy_Python Imaging Library_Pillow - Fatal编程技术网

Python 在图像上绘制多个透明遮罩

Python 在图像上绘制多个透明遮罩,python,numpy,python-imaging-library,pillow,Python,Numpy,Python Imaging Library,Pillow,我有一个图像和一些二进制遮罩,我想应用到图像上以突出显示某些区域。我可以画一个遮罩,但每个后续应用的遮罩都会越来越亮以前的遮罩和原始图像 如何在保持每个遮罩和图像亮度不变的情况下应用多个遮罩 将numpy导入为np 导入matplotlib 从matplotlib.pyplot导入imshow 从PIL导入图像、ImageDraw、ImageFont 导入请求 matplotlib.rcParams['figure.figsize']=(20.0,10.0) url='1〕https://upl

我有一个图像和一些二进制遮罩,我想应用到图像上以突出显示某些区域。我可以画一个遮罩,但每个后续应用的遮罩都会越来越亮以前的遮罩和原始图像

如何在保持每个遮罩和图像亮度不变的情况下应用多个遮罩

将numpy导入为np
导入matplotlib
从matplotlib.pyplot导入imshow
从PIL导入图像、ImageDraw、ImageFont
导入请求
matplotlib.rcParams['figure.figsize']=(20.0,10.0)
url='1〕https://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Grumpy_Cat_by_Gage_Skidmore.jpg/480px-Grumpy_Cat_by_Gage_Skidmore.jpg'
image=(image.open(requests.get(url,stream=True.raw)).convert('RGBA'))
注释1=(np.ones((image.size[1],image.size[0],3))*255.astype(np.uint8)
注释1[350:400,50:450]=(255,0,0)
mask1=(np.zero((image.size[1],image.size[0]))
mask1[350:400,50:450]=1
mask1=Image.fromarray(mask1,mode='1')
注释2=(np.ones((image.size[1],image.size[0],3))*255.astype(np.uint8)
注释2[400:450,50:450]=(255,0,0)
mask2=(np.zero((image.size[1],image.size[0]))
mask2[350:400,50:450]=1
mask2=Image.fromarray(mask2,mode='1')
annotation1=Image.fromarray(annotation1,mode='RGB')。convert('RGBA'))
annotation2=Image.fromarray(annotation2,mode='RGB')。convert('RGBA'))
注释1.putalpha(128)
注释2.putalpha(128)
图像=图像.alpha_组合(图像,注释1)
image=image.alpha_复合(图像,注释2)
imshow(图片)
我也尝试过使用
Image.composite()
,但它只显示遮罩,并将图像的其余部分变白

image=image.composite(图像,注释1,mask1)

您可以使用从位图绘制遮罩。每个遮罩可以有多个阴影,但只能有一种颜色

url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Grumpy_Cat_by_Gage_Skidmore.jpg/480px-Grumpy_Cat_by_Gage_Skidmore.jpg'
image = (Image.open(requests.get(url, stream=True).raw)).convert('RGBA')
image.putalpha(128)

mask1 = (np.zeros((image.size[1], image.size[0]))).astype(np.uint8)
mask1[350:400, 50:450] = 255
mask1 = Image.fromarray(mask1, mode='L')

mask2 = (np.zeros((image.size[1], image.size[0]))).astype(np.uint8)
mask2[410:460, 50:450] = 255
mask2[415:455, 55:445] = 128
mask2 = Image.fromarray(mask2, mode='L')

overlay = Image.new('RGBA', image.size, (255,255,255,0))
drawing = ImageDraw.Draw(overlay)
drawing.bitmap((0, 0), mask1, fill=(255, 0, 0, 128))
drawing.bitmap((0, 0), mask2, fill=(255, 0, 0, 128))

image = Image.alpha_composite(image, overlay)

imshow(image)

为什么不能将所有遮罩合并为一个?这似乎不是一个困难的操作,也许你只需要“或”所有的遮罩阵列。这可能会起作用,但我认为这可能会使用不同的颜色、图案或轮廓设计遮罩更加困难。