有没有办法根据其他元素的值修改 Numpy 数组中的元素?

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

假设我将图像打开为 Numpy 数组,并希望根据该像素的任何 RGB 值是否低于某个阈值来更改每个像素的透明度。

例如,给定以下数组:

[[[255 255 255 255] 
  [247 248 251 255] 
  [243 247 247 255]]
 [[ 29  26  73 255]
  [ 36  26  68 255]
  [ 88  78 118 255]]]

阈值为 245,预期输出为:

[[[255 255 255 255] 
  [247 248 251 255] 
  [243 247 247   0]]
 [[ 29  26  73   0]
  [ 36  26  68   0]
  [ 88  78 118   0]]]

我对 Numpy 的经验(知识)很少。我一直在挖掘文档和此处的 SO,但还没有找到任何类似的东西。我在搜索一整天后看到的所有示例都是关于更改正在检查的值,而不是基于该检查的不同值。

那么,正如问题所述,有没有一种方法可以在 Numpy 中有效地做到这一点,或者我应该寻找另一种方法来做到这一点?

python numpy
1个回答
0
投票

是的,您可以通过以下代码来实现:

import numpy as np

image_array = np.array([[[255, 255, 255, 255], 
                         [247, 248, 251, 255], 
                         [243, 247, 247, 255]],
                        [[ 29,  26,  73, 255],
                         [ 36,  26,  68, 255],
                         [ 88,  78, 118, 255]]])

threshold = 245

mask = np.any(image_array[:, :, :3] < threshold,axis=2)
image_array[mask, 3] = 0
print(image_array)

np.any(image_array[:, :, :3] < threshold,axis=2)
创建检查每个像素 RGB 值的桅杆。

image_array[mask, 3] = 0
使用mask将满足条件的像素的alpha通道设置为0

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