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