我有一个RGB色域的图像数组,希望添加阿尔法通道并将其设置为全零。具体来说,我有一个形状为(205,54,3)的numpy
数组,我希望将其形状更改为(205,54,4),第三维的额外位置都是0.0。哪个numpy
操作可以实现这一点?
# 将第三维增加到 4,并用零填充 image_alpha = np.concatenate([image, np.zeros((205, 54, 1))], axis=2) ```
我有一个RGB色域的图像数组,希望添加阿尔法通道并将其设置为全零。具体来说,我有一个形状为(205,54,3)的numpy
数组,我希望将其形状更改为(205,54,4),第三维的额外位置都是0.0。哪个numpy
操作可以实现这一点?
numpy.dstack( ( your_input_array, numpy.zeros((205, 54)) ) )
np.dstack
很有道理。 - Melanienp.zeros
中指定 dtype
。它的默认值是 float64
。https://numpy.org/doc/stable/reference/generated/numpy.zeros.html - kennytmrgba = numpy.concatenate((rgb, numpy.zeros((205, 54, 1))), axis=2)
Concatenate函数将rgb和zeros数组合并在一起。Zeros函数创建一个全是零的数组。我们将轴设置为2,这意味着我们在第三个维度上进行了合并。注意:轴从0开始计数。
np数组样式,在深度维度(通道维度,第三个维度)上堆叠:
rgba = np.dstack((rgb, np.zeros(rgb.shape[:-1])))
但你应该使用OpenCV函数:
rgba = cv2.cvtColor(rgb, cv2.COLOR_RGB2RGBA)
不确定您是否还在寻找答案。
最近,我正在尝试使用numpy实现与您相同的目标,因为我需要将24位深度的png强制转换为32位。 我同意使用dstack很合理,但我无法使其正常工作。 我使用了插入insert来达到我的目标。
# for your code it would look like the following:
rgba = numpy.insert(
rgb,
3, #position in the pixel value [ r, g, b, a <-index [3] ]
255, # or 1 if you're going for a float data type as you want the alpha to be fully white otherwise the entire image will be transparent.
axis=2, #this is the depth where you are inserting this alpha channel into
)
(205, 54, 4, 0)
这样吗?请提供一个输出示例。 - Linusx.shape = (205,54,3)
和x[0][0] = [255, 255, 255]
,我想要x[0][0] = [255, 255, 255, 0]
。 - Melanie