如何基于目标像素替换Numpy Image Arrray中的所有RGB值

问题描述 投票:1回答:1

我在一个Numpy阵列中有一个图像。我将用黑色和所有其他白色替换特定的颜色。For循环会变慢,并且我的Numpy条件不起作用。

与数组匹配的所有像素-> [121、112、131]必须完全替换为另一个数组-> [0、0、0]

所有其他--[255,255,255]

我的结果以与第一个频道[True,False,False]匹配的可监视像素结束

很抱歉拼写错误,我希望我的代码专家能更好地理解。

我的示例结果:

import numpy as np
from scipy import misc

file = misc.face()
img = np.array(f)

target_color = [121, 112, 131]
true_color = [0, 0, 0]
false_color = [255, 255, 255]

true_mask = np.all(img == target_color, axis=2)
false_mask = np.all(img != target_color, axis=2)

img[true_mask] = true_color
img[false_mask] = false_color

print(img)

输出:

array([[[  0,   0,   0],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       ...,

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [121, 157,  96],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=uint8)

问题:

[第一个通道等于目标颜色时,剩余像素。

Target Pixel: [121, 112, 131]
Overseen Pixel: [121, 157,  96]
python numpy image-processing multidimensional-array
1个回答
0
投票

您的图像形状为(768, 1024, 3)。您想掩盖它等于三元素数组的位置。您发现执行此操作的正确方法是

mask = np.all(img == target_color, axis=2)

这是可行的,因为形状是从最右边的尺寸广播的。您无需计算img != target即可得到反掩码:

false_mask = ~mask

但是您不需要这样做。您可以创建输出数组:

img = np.full_like(img, [255, 255, 255])

您可以设置被屏蔽的元素:

img[mask, :] = [0, 0, 0]

索引:很重要,因为您需要告诉它沿第三维进行所有操作,而遮罩要处理前两个。

© www.soinside.com 2019 - 2024. All rights reserved.