gpt4 book ai didi

python - 添加两个带有 2D 掩码的 3D numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:36 26 4
gpt4 key购买 nike

我想添加两个 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) 将蒙版复制到 3D 数组中

或者是否有更 pythonic 的方式来做到这一点?

提前致谢!

最佳答案

希望我可以添加评论而不是答案。无论如何:

masked_array 不是用于制作面具。它用于在诸如求和、均值等计算中仅包含掩码之外的数据。科学统计应用程序。它由一个数组和数组的掩码组成。这可能不是您想要的。

您可能只需要一个普通的 bool 掩码,如:

mask = diff>1

然后您需要修改形状,以便 numpy 在正确的维度中广播,然后将其广播到第 3 维:

mask.shape = mask.shape + (1,)
mask = np.broadcast_arrays(img1Array, mask)[1]

之后,您只需添加像素即可:

img1Array[mask] += img2Array[mask]

进一步澄清:

imgResult=img1Array+img2Array[mask]

那永远行不通。你说的是“将 img2Array 中的一些像素添加到 img1Array 中的所有像素”6_9

如果您想在两个或多个数组之间应用一个 ufunc,它们必须是相同的形状,或者可广播到相同的形状。

关于python - 添加两个带有 2D 掩码的 3D numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com