我有两个图像,一个是RGB图像,另一个是包含0和1的掩码图像,用于分割指定的对象。(两个图像都是同一个对象)我想只在第二个矩阵为1的索引处提取初始图像的RBG值,这样最终值就只是具有黑色背景的对象的图像。有没有简单的方法在numpy中实现这一点?我想解决这个问题,而不使用太多的for循环,我认为应该有一个直接向前的方式在numpy但我还没有任何运气到目前为止
qjp7pelc1#
您可以使用numpy的内置广播,然后直接以“pythonic”形式将两者相乘。
numpy
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]
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]]]
2条答案
按热度按时间qjp7pelc1#
您可以使用
numpy
的内置广播,然后直接以“pythonic”形式将两者相乘。或者,您可以通过np.newaxis扩展遮罩尺寸:
epfja78i2#
是的,我知道
你可以使用numpy。multiply,from here。
比如说