numpy 从向量数组索引矩阵

2ledvvac  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(158)

我有两个图像,一个是RGB图像,另一个是包含0和1的掩码图像,用于分割指定的对象。(两个图像都是同一个对象)我想只在第二个矩阵为1的索引处提取初始图像的RBG值,这样最终值就只是具有黑色背景的对象的图像。有没有简单的方法在numpy中实现这一点?
我想解决这个问题,而不使用太多的for循环,我认为应该有一个直接向前的方式在numpy但我还没有任何运气到目前为止

qjp7pelc

qjp7pelc1#

您可以使用numpy的内置广播,然后直接以“pythonic”形式将两者相乘。

import numpy as np

img = np.array([[[ 1,  2,  3],
                 [ 4,  5,  6]],
               [[ 7,  8,  9],
                [10, 11, 12]]])  # shape (2, 2, 3)

mask = np.array([[0,1],[0,1]])  # shape (2, 2)

masked_img = img * np.expand_dims(mask, -1)

或者,您可以通过np.newaxis扩展遮罩尺寸:

masked_img = img * mask[..., np.newaxis]
epfja78i

epfja78i2#

是的,我知道
你可以使用numpy。multiply,from here
比如说

img = np.array([
                 [[1,2],[3,4]],
                 [[5,6],[7,8]],
                 [[9,10],[11,12]]
               ])

mask = np.array(
                 [[0,1],[0,1]]
               )

print(np.array([
        np.multiply(img[0],mask),
        np.multiply(img[1],mask),
        np.multiply(img[2],mask)]
    ))
# Res: 

    #[[[ 0  2]
    #  [ 0  4]]
    #
    # [[ 0  6]
    #   [ 0  8]]
    #
    #  [[ 0 10]
    #  [ 0 12]]]

相关问题