路径存在但os.path.exists()返回False,先检查当前工作目录是否与预期一致,并确认路径中波浪号“~”已用os.path.expanduser()展开,Windows下反斜杠需转义或统一用正斜杠。

路径存在但os.path.exists()返回False?先检查工作目录和波浪号
很多人把图片放在项目根目录下,写"img/cat.jpg"却显示空白,其实是因为当前工作目录不是你想象的位置。Jupyter 启动时的工作目录由启动命令决定,不是 notebook 文件所在目录。
运行以下两行确认真实路径:
import os print(os.getcwd())
如果路径里含~(比如"~/data/cat.jpg"),必须用os.path.expanduser()展开,否则os.path.exists()一定失败:
-
os.path.exists("~/data/cat.jpg")→False -
os.path.exists(os.path.expanduser("~/data/cat.jpg"))→True(如果文件真存在)
Windows 用户还要注意反斜杠在字符串里是转义符,要么写双反斜杠"C:\data\cat.jpg",要么统一用正斜杠"C:/data/cat.jpg"。
cv2.imread()读出来是None?检查颜色通道和文件损坏
OpenCV 的cv2.imread()静默失败——读不到图就返回None,不会报错。紧接着传给plt.imshow()就会黑屏或报TypeError。
常见原因:
- 文件路径正确但图片实际已损坏(尤其从网页下载的 JPEG 可能缺头)
- 路径含中文或空格,OpenCV 在某些旧版本下无法解析
- 读取后未检查返回值:
img = cv2.imread("cat.jpg"); print(img.shape)如果报AttributeError,说明img是None
OpenCV 默认读 BGR,Matplotlib 显示要 RGB,别忘了转换:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("cat.jpg")
if img is not None:
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 必须这步
plt.imshow(img_rgb)
plt.axis('off')
plt.show()用IPython.display.Image显示本地图却一闪消失?关掉 nbextension 冲突项
Markdown 单元格里粘贴图片后闪一下就变图标,大概率是 nbextensions 插件冲突。最常踩坑的是LaTeX environments for Jupyter这个扩展,它会劫持 Markdown 渲染流程。
解决方法很简单:
- 在 Jupyter 主页右上角点 Settings → Nbextensions config
- 找到
LaTeX environments for Jupyter,取消勾选 - 刷新浏览器页面,重试粘贴或 Markdown 图片语法
其他可疑扩展还有 Hide Input、Collapsible Headings,如果问题还在,可逐个禁用测试。
matplotlib绘图后没显示?别漏掉%matplotlib inline
这是新手最高频的遗漏点:没启用内联后端,plt.show() 会尝试弹窗(Linux/macOS 下因无 DISPLAY 报 RuntimeError,Windows 可能卡住或无声失败)。
必须在 notebook 最开头(第一个代码单元格)执行:
%matplotlib inline
注意三点:
- 它只对当前 kernel 生效,重启 kernel 后需重新运行
- 不能写成
plt.show()+%matplotlib inline混用——前者在 inline 模式下是冗余的,且可能干扰输出顺序 - 如果用了
%matplotlib widget等交互后端,切换回 inline 需重启 kernel,否则图像可能不刷新
复杂点在于:有些环境(如远程服务器、Docker 容器)连%matplotlib inline都不起作用,这时得换用plt.savefig()保存再手动查看,或者改用display(Image(...))绕过 matplotlib 渲染链。


















