如何以灰度模式显示图像?代码无法运行请求排查帮助
问题排查与修正
你的代码无法正常显示灰度图主要存在两个核心问题,还有一处细节瑕疵:
核心问题1:未将图像转为单通道灰度格式
你传入plt.imshow()的是3通道RGB数组,此时指定cmap=cm.Greys_r不会生效——matplotlib的颜色映射仅对单通道(灰度)数组起作用,3通道数组会被直接当作RGB图像渲染,不会应用灰度配色。核心问题2:缺少图像显示触发代码
调用plt.imshow()后未执行plt.show(),在非交互式环境(如脚本)中,这一步是触发图像窗口渲染的必要操作。细节问题:文件格式不匹配
你下载的是JPG格式图片,但保存时用了.png后缀,虽然PIL能兼容打开,但建议保持后缀与实际格式一致,避免潜在路径或解析问题。
修正后的完整代码
import urllib.request import matplotlib.pyplot as plt import matplotlib.cm as cm import numpy as np from PIL import Image # 下载图像并使用对应JPG后缀 urllib.request.urlretrieve( 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/1024px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg', "Mona_Lisa.jpg") # 打开文件(本地运行直接用文件名,Colab环境保留/content路径) img = Image.open("Mona_Lisa.jpg") # 直接转换为单通道灰度图('L'代表8位灰度模式) gray_image = img.convert('L') gray_array = np.array(gray_image) # 显示灰度图并触发渲染 plt.imshow(gray_array, cmap=cm.Greys_r) plt.axis('off') # 可选:隐藏坐标轴优化显示效果 plt.show()
关键修改说明
- 调整保存文件名为
Mona_Lisa.jpg,与下载图像的实际格式匹配; - 用
img.convert('L')直接生成单通道灰度图,省去先转RGB的冗余步骤; - 添加
plt.show()完成图像显示的最终触发; - 可选添加
plt.axis('off')隐藏坐标轴,让图像显示更整洁。
内容的提问来源于stack exchange,提问作者sahuno
相关产品推荐
相关产品推荐

