不使用 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。
是否可以在不使用以下代码的情况下将 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。