2024-09-30 10:36:59 发布
网友
是否可以在不使用以下代码(即不使用opencv)的情况下将RGBA图像转换为BGRA
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]],但由于它使用了奇特的索引,而不是修改旧数组,因此它会创建旧数组的副本,从而占用更多内存
image = image[..., [2,1,0,3]]
再次使用同一行代码将图像从RGBA转换回BGRA
像这样的“花式索引”:
我认为OpenCV喜欢其数据连续性,因此如果您遇到问题,请使用:
您可以使用以下代码行将图像从BGRA转换为RGBA:
当然,它会修改现有的数组,而不是创建一个新的(如果您不打算再次使用旧的数组,这是很好的,因为它更有效)。另一种方法是
image = image[..., [2,1,0,3]]
,但由于它使用了奇特的索引,而不是修改旧数组,因此它会创建旧数组的副本,从而占用更多内存再次使用同一行代码将图像从RGBA转换回BGRA
相关问题 更多 >
编程相关推荐