Python 枕头/裸体中的高效粘贴/合成蒙版图像

Python 枕头/裸体中的高效粘贴/合成蒙版图像,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,我有两张png图像: heart40.png(带透明背景的40x40)- 背景40.png(40x40)- 图像被划分为8x8像素网格,并从1开始编号-- 我只想要从heart40.png中选择的网格,例如(1,5,8,13,23),覆盖到background40.png上,结果-- 我用的是枕头(我真的不想切换到另一个图像库,除非有一个显示停止)。下面的代码可以工作-- 当我为我不想显示的所有网格绘制透明正方形时,当有数千个网格时,这可能会非常低效,但我只想显示其中的几个网格 所以问题是:有没

我有两张png图像:

heart40.png(带透明背景的40x40)-

背景40.png(40x40)-

图像被划分为8x8像素网格,并从1开始编号--

我只想要从heart40.png中选择的网格,例如(1,5,8,13,23),覆盖到background40.png上,结果--

我用的是枕头(我真的不想切换到另一个图像库,除非有一个显示停止)。下面的代码可以工作--

当我为我不想显示的所有网格绘制透明正方形时,当有数千个网格时,这可能会非常低效,但我只想显示其中的几个网格


所以问题是:有没有更有效的方法?

我很忙,但是有一个想法你可以使用,即使我没有编写和测试所有的代码

grid=np.arange(1,26).reshape(5,5)
我会给你这个:

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25]])
然后确定你想要什么:

wanted=[1,5,8,13,23]
并使用
numpy.isin()
测试是否需要每个网格:

mask=np.isin(grid,wanted)
这给了你:

array([[ True, False, False, False,  True],
       [False, False,  True, False, False],
       [False, False,  True, False, False],
       [False, False, False, False, False],
       [False, False,  True, False, False]])

现在,您可以将其乘以255,这将为您提供一个黑白蒙版。您可以将遮罩制作成一幅图像,并通过最近邻重采样将其放大5倍,使其达到正确的大小。

我的答案解决了您的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢谢谢你,马克。我从你的回答中学到了一些新东西。但是,由于您没有提供完整的答案,而我又太忙/跛脚,无法调查最近的邻居,因此我认为按照这样的标准,答案是不可接受的。好吧,没有任何关于StackOverflow的完整答案的要求。事实上,通常一个提示就是帮助某人所需要的全部。此外,经常发生的情况是,一个人可以提供部分答案,这鼓励知道另一半答案的其他人提供该部分答案。此外,据我估计,我下面的答案可能比你在StackOverflow上找到的70%以上的答案更全面。
mask=np.isin(grid,wanted)
array([[ True, False, False, False,  True],
       [False, False,  True, False, False],
       [False, False,  True, False, False],
       [False, False, False, False, False],
       [False, False,  True, False, False]])