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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:45:55