RuntimeError: output with shape [1, 256, 256] doesn‘t match the broadcast shape [3, 256, 256]

在复现医学分割代码时遇到错误,因原图是灰度图像而非RGB。通过OpenCV使用cv2.cvtColor将灰度图转换为RGB图,用np.zeros_like创建三通道图像并赋值。修改后需检查图片位深度确保正确,然后可以用于模型处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

在复现医学分割的一个代码的时候。


问题描述

把数据集换成自己的报错。

原因分析:

学长告诉我就是mask图是灰度图,这个代码处理的是RGB图,所以一直报错。应该把mask图转换成RGB图再处理。

解决方案:

学长说对了,但是对象错了。我最后发现是image本身是灰度图像。
我一直弄mask图一直报错报错,笑哭,之后改了输出也报错,原来是输入的问题(…)。
你看自己图片,右击图片属性,摘要,点击详细属性,里面有位深度一项。如果是RGB图,位深度是24;如果是灰度和索引图,位深度是8;灰度是白灰黑表示的图,索引图有可能是彩色的,但也是8位深。
我用的数据集的原图就是灰度图(mask也是),但我的报错原因是原图是灰度图。
按着下面这个代码就可以把单通道变成三通道图了。
处理好图片再放入模型就好了。

import cv2
import os
import numpy as np
path = ' 源文件所在目录 图片文件'
savefilepath = '输出文件所在目录 图片文件'
datanames = os.listdir(path)
for i in datanames:
    img = cv2.imread(path + '/' + str(i))
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img2 = np.zeros_like(img)
    img2[:, :, 0] = gray
    img2[:, :, 1] = gray
    img2[:, :, 2] = gray
    cv2.imwrite(savefilepath + i, img2)

参考:

  1. 如何把单通道图片转换为三通道图片
  2. 如何看图片是不是单通道
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值