我正在尝试在OpenCV中处理一些图像。具体地说,使用以下函数交换颜色窗格。
def green_ble_swap(image)
im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
im_copy = np.copy(im_rgb)
blue = im_copy[:,:,2].copy()
green = im_copy[:,:,1].copy()
im_copy[:,:,2] = green
im_copy[:,:,1] = blue
return im_copy
然而,我得到了以下错误。
> Unsupported depth of input image:
> 'VDepth::contains(depth)'
> where
> 'depth' is 4 (CV_32S)
不确定这里的错误是什么。
发布于 2020-01-21 06:59:03
您遇到该错误是因为您正在尝试对4通道图像执行3通道操作。具体地说,当输入图像具有透明通道时,尝试将BGR
图像转换为RGB
时会出现错误。正确的方法应该是使用cv2.COLOR_BGRA2RGB
而不是cv2.COLOR_BGR2RGB
。您可以使用cv2.split()
就地交换蓝色和绿色通道,以获得BGR
通道(对于3通道图像)和BGRA
通道(对于4通道图像),然后使用Numpy索引交换通道。加载图像时还需要使用cv2.IMREAD_UNCHANGED
标志,否则alpha通道将被丢弃。示例:
输入->
输出
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()
https://stackoverflow.com/questions/59804225
复制相似问题