根据条件

时间:2018-04-03 14:08:07

标签: python arrays image numpy

我有两张图片img1img2。我试图在img1中找到颜色[0,204,204]的所有位置,并将其替换为同一位置img2中的任何内容。我可以使用np.where()找到出现颜色的地方,并直接用不同的颜色替换它:

img1[np.where((img1==[0,204,204]).all(axis=2))] = [255,255,0]

我不确定如何获取这些单元格的索引,因为图像的形状是3个维度的5070000,因此,我无法有效地显示数组。查看numpy文档,我想我可以做类似的事情:

img2[img1[img1==[0,204,204]]]

获取发生该颜色的img1索引,然后从img2调用相同的数组位置,但是,我似乎无法正确使用此语法。帮助

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用以下内容:

img1[np.where((img1==[0,204,204]).all(axis=2))] = img2[np.where((img1==[0,204,204]).all(axis=2))]

这是有效的,因为您最初的语法(np.where((img1==[0,204,204]).all(axis=2)))已经返回了您要查找的索引

示例(在小数组上):

img1 = np.array([[[0,204,204],[0,0,0],[1,2,3]]])

array([[[  0, 204, 204],
        [  0,   0,   0],
        [  1,   2,   3]]])

img2 = np.array([[[0,1,2],[1,1,1],[2,7,3]]])

array([[[0, 1, 2],
        [1, 1, 1],
        [2, 7, 3]]])

img1[np.where((img1==[0,204,204]).all(axis=2))] = img2[np.where((img1==[0,204,204]).all(axis=2))]

>>> img1
array([[[0, 1, 2],
        [0, 0, 0],
        [1, 2, 3]]])