gpt4 book ai didi

python - 将RGB白色设置为透明?

转载 作者:行者123 更新时间:2023-12-04 13:48:26 24 4
gpt4 key购买 nike

我有一个图像,我使用 matplotlib.pyplot.imread 加载到 python 中结果是 numpy包含 rgb 值数组的数组。这是一个虚拟片段,除了两个像素之外都是白色的:

>>> test
array([[[255, 255, 255],
[255, 255, 255]],

[[ 1, 255, 255],
[255, 255, 255]],

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

我想为所有白色像素创建一个蒙版。我想我可以做类似的事情
>>> mask = (test != [255, 255, 255])

这会给:
array([[[False, False, False],
[False, False, False]],

[[ True, True, True],
[False, False, False]],

[[False, False, False],
[ True, True, True]]], dtype=bool)

我该怎么做呢?

或者,我认为 imshow 有一个输入参数这是这样做的,但文档不清楚如何。好像 alpha会改变整个图像和 vmax接受似乎与 RGB 颜色不兼容的缩放器。

最佳答案

一种选择是构建一个 masked array然后 imshow它:

import numpy as np
from matplotlib import pyplot as plt

x = np.array([[[255, 255, 255],
[255, 255, 255]],
[[ 1, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 6, 255]]], dtype=np.uint8)

mask = np.all(x == 255, axis=2, keepdims=True)

# broadcast the mask against the array to make the dimensions the same
x, mask = np.broadcast_arrays(x, mask)

# construct a masked array
mx = np.ma.masked_array(x, mask)

plt.imshow(mx)

mask 的值将呈现透明。

另一种选择是将您的 RGB 数组转换为 RGBA 数组,在红色、绿色和蓝色 channel 都等于 255 的任何地方将 alpha channel 设置为零。
alpha = ~np.all(x == 255, axis=2) * 255
rgba = np.dstack((x, alpha)).astype(np.uint8)

plt.imshow(rgba)

请注意,我必须投 rgba连接后返回 uint8,因为 imshow期望 RGBA 数组是 uint8 或浮点数。

关于python - 将RGB白色设置为透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365669/

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