VSCode中Jupyter Notebook运行OpenCV imshow()程序无响应问题
解决VSCode Jupyter Notebook中OpenCV窗口无响应问题
方法一:用Matplotlib替代cv2.imshow显示图像
Jupyter的交互环境和OpenCV独立窗口的事件循环不兼容,改用Matplotlib显示能彻底避免无响应问题,代码如下:
import cv2 from matplotlib import pyplot as plt cap = cv2.VideoCapture('../data/videos/cat.mp4') ret, frame = cap.read() # OpenCV默认读入BGR格式,转成Matplotlib支持的RGB格式 frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) plt.imshow(frame_rgb) plt.axis('off') # 隐藏多余坐标轴 plt.show()
显示的图像直接嵌入Notebook,关闭操作完全适配Jupyter环境。
方法二:优化cv2窗口的资源释放逻辑
如果一定要用cv2.imshow,通过调整资源释放顺序和事件处理步骤,降低阻塞概率:
import cv2 cap = cv2.VideoCapture('../data/videos/cat.mp4') ret, frame = cap.read() cv2.imshow('Hi', frame) cv2.waitKey(0) # 等待按键输入 cap.release() # 先释放视频捕获资源 cv2.destroyWindow('Hi') # 先销毁指定窗口 cv2.waitKey(1) # 额外触发一次事件循环,确保窗口正常关闭 cv2.destroyAllWindows()
多添加的waitKey(1)能强制OpenCV处理完窗口关闭事件,避免Jupyter进程卡住。
方法三:使用Jupyter魔法命令嵌入显示
在单元格开头添加%matplotlib inline魔法命令,让图像直接嵌入Notebook,完全规避独立窗口的兼容性问题:
%matplotlib inline import cv2 from matplotlib import pyplot as plt cap = cv2.VideoCapture('../data/videos/cat.mp4') ret, frame = cap.read() frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) plt.imshow(frame_rgb) plt.axis('off') plt.show()
内容的提问来源于stack exchange,提问作者RogerKint
相关产品推荐
相关产品推荐

