You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以灰度模式显示图像?代码无法运行请求排查帮助

问题排查与修正

你的代码无法正常显示灰度图主要存在两个核心问题,还有一处细节瑕疵:

  • 核心问题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()

关键修改说明

  1. 调整保存文件名为Mona_Lisa.jpg,与下载图像的实际格式匹配;
  2. 用img.convert('L')直接生成单通道灰度图,省去先转RGB的冗余步骤;
  3. 添加plt.show()完成图像显示的最终触发;
  4. 可选添加plt.axis('off')隐藏坐标轴,让图像显示更整洁。

内容的提问来源于stack exchange,提问作者sahuno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:50:33