不使用 opencv 将图像转换为 BGRA 颜色 space

Convert image to BGRA color space without using opencv

是否可以在不使用以下代码的情况下将 RGBA 图像转换为 BGRA,即不使用 opencv?

image = self.cv2.cvtColor(image, self.cv2.COLOR_RGBA2BGRA)

像这样 “花式索引”:

# Make a dummy, random 4-channel image
RGBA = np.random.randint(0,256,(2,3,4), np.uint8)

In [3]: RGBA
Out[3]: 
 array([[[102, 204,  36, 128],
         [178, 151, 166,  45],
         [199,  49, 104,  98]],

        [[ 79,  33, 223,  62],
         [ 26,  34, 233, 254],
         [ 62,  20,  57, 149]]], dtype=uint8)

# Convert RGBA to BGRA
BGRA = RGBA[..., [2,1,0,3]]

In [5]: BGRA
Out[5]: 
array([[[ 36, 204, 102, 128],
        [166, 151, 178,  45],
        [104,  49, 199,  98]],

       [[223,  33,  79,  62],
        [233,  34,  26, 254],
        [ 57,  20,  62, 149]]], dtype=uint8)

我认为 OpenCV 喜欢它的数据是连续的,所以如果遇到问题,请使用:

BGRA = RGBA[..., [2,1,0,3]].copy()

您可以使用这行代码将图像从 BGRA 转换为 RGBA:

image[..., :3] = image[..., 2::-1]

当然,它修改现有数组而不是创建一个新数组(如果您不打算再次使用旧数组,这很好,因为它更有效率) .另一种方法是 image = image[..., [2,1,0,3]],但由于它使用花哨的索引,而不是修改旧数组,它会创建旧数组的副本,这会占用更多内存。

再次使用同一行代码将图像从 RGBA 转换回 BGRA。