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

2024-09-30 10:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 代码图像imageself情况cv2opencvcolor
2条回答

像这样的“花式索引”:

# 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

相关问题 更多 >

    热门问题