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

被折叠的 条评论
为什么被折叠?



