Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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 添加两个具有二维遮罩的三维numpy阵列_Python_Numpy_Python Imaging Library - Fatal编程技术网

Python 添加两个具有二维遮罩的三维numpy阵列

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

我想添加两个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.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,它们必须是相同的形状,或者可以广播到相同的形状。

谢谢您的回答!难怪我找不到答案,我走错了方向。这似乎解决了我的问题。不过,我必须清理一下并确认一下。谢谢你提到
广播阵列
。直到现在我才知道那是件事。