首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不支持的输入图像深度:'VDepth::contains( depth )‘,其中'depth’是4 (CV_32S)

不支持的输入图像深度:'VDepth::contains( depth )‘,其中'depth’是4 (CV_32S)
EN

Stack Overflow用户
提问于 2020-01-19 03:49:35
回答 1查看 4.2K关注 0票数 2

我正在尝试在OpenCV中处理一些图像。具体地说,使用以下函数交换颜色窗格。

代码语言:javascript
运行
复制
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

然而,我得到了以下错误。

代码语言:javascript
运行
复制
> Unsupported depth of input image:
>     'VDepth::contains(depth)'
> where
>     'depth' is 4 (CV_32S)

不确定这里的错误是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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通道将被丢弃。示例:

输入->输出

代码语言:javascript
运行
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59804225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档