假设我将图像打开为 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 中有效地做到这一点,或者我应该寻找另一种方法来做到这一点?
是的,您可以通过以下代码来实现:
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