【问题标题】:Replace numpy cell with values from second array based on a condition根据条件用第二个数组中的值替换 numpy 单元格
【发布时间】:2018-04-03 14:08:06
【问题描述】:

我有两张图片,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 调用相同的数组位置,但是,我似乎无法正确获取此语法。帮忙?

【问题讨论】:

    标签: python arrays image numpy


    【解决方案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]]])
    

    【讨论】:

    • 完美运行。现在看来如此明显。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多