gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:54:28 49 4
gpt4 key购买 nike

我在 Numpy 数组中有一个图像。我将用黑色替换特定颜色,用白色替换所有其他颜色。For 循环速度变慢,我的 numpy 条件不起作用。

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

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

我的结果以与第一个 channel 匹配的监督像素结束 [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)

输出:

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)

问题:

当第一个 channel 等于目标颜色时,还有剩余的像素。

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]

索引 : 很重要,因为您需要告诉它沿着第三个维度获取所有内容,而掩码则负责前两个。

关于python - 如何根据目标像素替换 Numpy 图像数组中的所有 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61808326/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com