ValueError: operands could not be broadcast together with shapes (416,416,4) (3,)

在深度学习训练中遇到ValueError,原因是读取了四通道图像而非三通道RGB图片。解决方法包括直接跳过非三通道图片或将其转换为三通道。四通道图像包含额外的Alpha通道,用于表示透明度,通过Alpha混色公式计算显示颜色。

1.问题描述

在深度学习训练、读取图片时,遇到下面问题

ValueError: operands could not be broadcast together with shapes (416,416,4) (3,)

2.原因分析

一般是读三通道的图片,即RGB图片,而根据报错情况,可以看到图片是四通道,此外还有灰度图是单通道也会类似情况。

3.处理方法

3.1 直接跳过非三通道图片
for img in imgs:
        img = os.path.join(root, img)
        img=cv2.imread(img)
        img=cv2.resize(img,(416,416))
        if img.shape[2] != 3:
            continue
3.2 将非三通道图片转为三通道图片
from PIL import Image
if im.shape[2] == 4:
  im = Image.open(im_path).convert("RGB")

4.四通道相关知识

在图像处理中,真彩位图文件的每个通道都定义为 8 位,可以提供 256 个级别的强度。因此,一个 RGB 文件是 24 位的,具有 256 个级别(都带有红、绿和蓝)。而RGBA 文件(红、绿、蓝、alpha)是 32 位的,具有额外的 8 位 alpha,Alpha用来衡量一个像素或图像的透明度,可以提供 256 个级别的透明度。这样,每个像素是由四个部分组成:一个Alpha通道和三个颜色分量(R、G和B)。当Alpha值为0时,该像素是完全透明的,而当Alpha值为255时,该像素完全不透明。
  Alpha混色是将源像素和背景像素的颜色进行混合,最终显示的颜色取决于其RGB颜色分量和Alpha值。
它们之间的关系可用下列公式来表示:
显示颜色 = 源像素颜色 X alpha / 255 + 背景颜色 X (255 - alpha) / 255

5.参考资料

https://blog.csdn.net/H2008066215019910120/article/details/13558597
https://blog.csdn.net/qq_31486503/article/details/80467302

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值