Jupyter Notebook中cv2.imshow无法显示图像且内核卡顿求助
问题描述
在Anaconda环境的Jupyter Notebook中运行Python代码时,Python 3 (ipykernel)内核卡顿(指示灯呈实心圆形持续不变)。已通过pip卸载并重装opencv-python,确认图片文件与笔记本在同一目录(无文件路径问题)。
运行代码:
import cv2 img = cv2.imread('galaxy.jpg', cv2.IMREAD_GRAYSCALE) print(type(img)) print(img) print(img.shape) # (1485, 990) print(img.ndim) # 2 because grayscale cv2.imshow('Galaxy', img) cv2.waitKey(0) cv2.destroyAllWindows()
得到输出:
<class 'numpy.ndarray'> [[14 18 14 ... 20 15 16] [12 16 12 ... 20 15 17] [12 13 16 ... 14 24 21] ... [ 0 0 0 ... 5 8 14] [ 0 0 0 ... 2 3 9] [ 1 1 1 ... 1 1 3]] (1485, 990) 2
但cv2.imshow无法显示图像,内核卡顿,请问问题出在哪里?
问题原因与解决方法
核心原因
Jupyter Notebook采用后台/服务器模式运行,cv2.imshow依赖本地图形界面(GUI)资源创建显示窗口,但Jupyter内核无法直接调用本地GUI环境,导致窗口无法弹出;同时cv2.waitKey(0)会一直等待用户按键输入,直接阻塞内核,造成卡顿(指示灯保持实心圆形)。
解决办法
方案一:用Matplotlib在Notebook内显示图像
替换cv2.imshow相关代码,利用Matplotlib直接在单元格内渲染图像,无需外部窗口,完全适配Notebook环境:
import cv2 import matplotlib.pyplot as plt img = cv2.imread('galaxy.jpg', cv2.IMREAD_GRAYSCALE) # 保留原有输出逻辑 print(type(img)) print(img) print(img.shape) print(img.ndim) # Matplotlib显示灰度图 plt.imshow(img, cmap='gray') plt.axis('off') # 隐藏坐标轴 plt.show()
方案二:在本地终端运行脚本
如果坚持使用cv2.imshow,将代码保存为.py文件,激活Anaconda对应环境后,在终端执行:
python your_script_name.py
这样能正常调用本地GUI弹出窗口,按任意键后窗口关闭,不会阻塞内核。
补充说明
cv2.waitKey(0)的作用是等待按键输入后继续执行后续代码,在Jupyter环境中因为窗口无法创建,这个函数会无限等待,直接导致内核卡死,这就是指示灯一直保持实心圆形的原因。改用Matplotlib的方式完全适配Notebook运行逻辑,不会出现阻塞问题。
内容的提问来源于stack exchange,提问作者Joe Mcsweeney
相关产品推荐
相关产品推荐

