Python 添加两个具有二维遮罩的三维numpy阵列
我想添加两个3D numpy阵列(RGB图像阵列),其中包含由灰度图像上的某些算法生成的2D遮罩。最好的方法是什么 作为我尝试做的一个例子:Python 添加两个具有二维遮罩的三维numpy阵列,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,我想添加两个3D numpy阵列(RGB图像阵列),其中包含由灰度图像上的某些算法生成的2D遮罩。最好的方法是什么 作为我尝试做的一个例子: from PIL import Image, ImageChops, ImageOps import numpy as np img1=Image.open('./foo.jpg') img2=Image.open('./bar.jpg') img1Grey=ImageOps.grayscale(img1) img2Grey=ImageOps.gray
from PIL import Image, ImageChops, ImageOps
import numpy as np
img1=Image.open('./foo.jpg')
img2=Image.open('./bar.jpg')
img1Grey=ImageOps.grayscale(img1)
img2Grey=ImageOps.grayscale(img2)
# Some processing for example:
diff=ImageChops.difference(img1Grey,img2Grey)
mask=np.ma.masked_array(img1,diff>1)
img1Array=np.asarray(im1)
img2Array=np.asarray(im2)
imgResult=img1Array+img2Array[mask]
我在想:1) 分解RGB图像并分别使用每种颜色
2) 将遮罩复制到三维阵列中 还是有一种更像蟒蛇的方式来做到这一点
提前谢谢 希望我能添加评论而不是答案。无论如何: 蒙版_阵列不用于制作蒙版。它只用于在计算中包括掩码外的数据,如总和、平均值等。。科学统计应用。它由一个数组和数组的掩码组成。 这可能不是你想要的 您可能只需要普通布尔掩码,如中所示:
mask = diff>1
然后需要修改形状,以便numpy以正确的维度广播,然后将其广播到第三维:
mask.shape = mask.shape + (1,)
mask = np.broadcast_arrays(img1Array, mask)[1]
之后,只需添加像素即可:
img1Array[mask] += img2Array[mask]
还有一点需要澄清:
imgResult=img1Array+img2Array[mask]
那是行不通的。您的意思是“将img2Array中的一些像素添加到img1Array中的所有像素”69
如果要在两个或多个阵列之间应用ufunc,它们必须是相同的形状,或者可以广播到相同的形状。谢谢您的回答!难怪我找不到答案,我走错了方向。这似乎解决了我的问题。不过,我必须清理一下并确认一下。谢谢你提到
广播阵列。直到现在我才知道那是件事。