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

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

你可能感兴趣的:(Debug)