VS Code中显示灰度图报错ValueError: not enough values to unpack求助
解决显示灰度图像时的ValueError错误
错误根源
灰度图像属于单通道图像,通过plt.imread()读取后,im_data.shape返回的是**(高度, 宽度)**两个维度值。但你的display函数里强行将其解包为三个变量(height, width, depth),导致抛出「not enough values to unpack (expected 3, got 2)」的错误。
修复代码
修改display函数,让它同时兼容单通道灰度图和多通道彩色图:
def display(im_path): dpi = 80 im_data = plt.imread(im_path) # 适配单通道/多通道图像的shape结构 if len(im_data.shape) == 2: height, width = im_data.shape else: height, width, _ = im_data.shape # 通道数变量用下划线忽略,不影响后续计算 figsize = width/float(dpi), height/float(dpi) fig = plt.figure(figsize=figsize) ax = fig.add_axes([0, 0, 1, 1]) ax.axis('off') # 根据图像类型选择显示方式 if len(im_data.shape) == 2: ax.imshow(im_data, cmap='gray') else: # 转换cv2保存的BGR格式为plt需要的RGB格式,避免颜色失真 ax.imshow(cv.cvtColor(im_data, cv.COLOR_BGR2RGB)) plt.show()
补充说明
- 用
cv2.imwrite保存的彩色图像是BGR色彩空间,而plt.imread读取后默认按RGB解析,直接显示会出现颜色偏差,所以需要用cv.COLOR_BGR2RGB转换格式。 - 灰度图没有通道维度,必须通过判断
shape的长度来区分处理,避免解包维度不匹配的问题。
内容的提问来源于stack exchange,提问作者Chayan
相关产品推荐
相关产品推荐

