Вы столкнулись с ошибкой, потому что пытаетесь выполнить 3-канальную операцию с 4-канальным изображением. В частности, ошибка возникает при попытке преобразовать изображение BGR
в RGB
, когда входное изображение имеет прозрачный канал. Правильный метод будет делать cv2.COLOR_BGRA2RGB
вместо cv2.COLOR_BGR2RGB
. Вы можете поменять местами синий и зеленый каналы, используя cv2.split()
, чтобы получить каналы BGR
(для 3-канального изображения) и каналы BGRA
для (4-канальное изображение), а затем поменять местами каналы, используя индексирование Numpy , Вам также нужно использовать флаг cv2.IMREAD_UNCHANGED
при загрузке изображения, иначе альфа-канал будет сброшен. Пример:
Вход ->
Выход
import cv2
import numpy as np
def green_blue_swap(image):
# 3-channel image (no transparency)
if image.shape[2] == 3:
b,g,r = cv2.split(image)
image[:,:,0] = g
image[:,:,1] = b
# 4-channel image (with transparency)
elif image.shape[2] == 4:
b,g,r,a = cv2.split(image)
image[:,:,0] = g
image[:,:,1] = b
return image
# Load image
image = cv2.imread('1.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('image', image)
# Swap channels
swapped = green_blue_swap(image)
cv2.imshow('swapped', swapped)
cv2.waitKey()