根据另一个图像中的像素值设置图像的 alpha 通道

Setting the alpha channel of an image, based on the pixel values in another image

我有两张图片。在一个图像中,所有非 alpha 通道像素都等于 0,我希望 alpha 通道值等于 255,而在另一幅大小相同的图像中,像素不为 0。在这次尝试中,我' m 尝试基于原始图像创建一个 4 通道 np 数组,然后使用 np.argwhere 查找像素值非零的位置,然后在新的 np 数组中,根据以下设置 alpha 通道值那。

例如,对于输入图像中值为 [255, 255, 255] 的每个像素,我希望新图像中的对应像素为 [0, 0, 0, 255]。对于输入图像中值为 [0, 0, 0] 的每个像素,我希望新图像中的相应像素为 [0, 0, 0, 0].

mask_file = cv.imread(r'PlateMask_0001.png', cv.IMREAD_UNCHANGED)

scale_factor = 0.125
w = int(mask_file.shape[1] * scale_factor)
h = int(mask_file.shape[0] * scale_factor)
scaled = cv.resize(mask_file, (w, h))

coords = np.argwhere(scaled > 0)
new_object = np.zeros((120, 160, 4))
new_object[coords, :] = 255
cv.imshow('Mask', mask)
cv.imshow('Scaled', new_object)
cv.waitKey(0)
cv.destroyAllWindows()

这是我关于 Stack 的第一个问题,所以请随时提出有关问题格式等方面的改进建议。谢谢。

img1 视为您的原始图像,将 img2 视为需要修改 alpha 通道的图像。

在下文中,img2 的 alpha 通道在 img1 具有 (255, 255, 255) 的坐标中包含值 255:

img2[:,:,3][img1 == (255, 255, 255)]  = 255

同样适用于值 0:

img2[:,:,3][img1 == (0, 0, 0)]  = 0