如何根据目标像素替换 Numpy 图像数组中的所有 RGB 值

2024-02-17

我有一个 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(file)

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)

Output:

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)

Problem:

当第一个通道等于目标颜色时,还剩下像素。

Target Pixel: [121, 112, 131]
Overseen Pixel: [121, 157,  96]

你的图像形状是(768, 1024, 3)。您想要制作一个等于 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]

指数:很重要,因为您需要告诉它沿三维方向进行所有操作,而蒙版则负责前两个维度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据目标像素替换 Numpy 图像数组中的所有 RGB 值 的相关文章