我有一个图像转换成具有RGBA值的ndarray。假设它是50×50×4。在
我想用array([255, 255, 255, 255])
的值array([255, 255, 255, 255])
替换所有像素。所以:
from numpy import *
from PIL import Image
def test(mask):
mask = array(mask)
find = array([255, 255, 255, 255])
replace = array([0, 0, 0, 0])
return putmask(mask, mask != find, replace)
mask = Image.open('test.png')
test(mask)
我做错什么了?这给了我一个ValueError: putmask: mask and data must be the same size
。但是如果我把数组改成数字(find=255,replace=0),它就可以工作了。在
一个更简洁的方法是
更一般地说,如果
^{pr2}$find
和repl
的项目不完全相同,您也可以这样做实现这种通道掩蔽的一种方法是将阵列分割为r、g、b、a通道,然后使用numpy逻辑位操作定义索引:
这个解决方案使用
putmask
,我认为它最接近于OPs代码。原始代码中有两个错误,操作员应该知道:1)putmask是一个就地操作。它返回None
。2)putmask
还需要大小相等的数组。它(太糟糕了)没有axis
关键字参数。在相关问题 更多 >
编程相关推荐