【发布时间】:2018-02-24 10:42:06
【问题描述】:
我在 google 或 stackoverflow 上查看了其他问题,他们说的是在脚本中运行 cv2.imshow,但我的代码在 jupyter notebook 中运行。
这是我的配置:
ubuntu 16.4x64
python 3.5
opencv 3.1.0
我启动了一个 jupyter 笔记本:这是我把它放在笔记本上的代码:
%pylab notebook
import cv2
cvim2disp = cv2.imread('data/home.jpg')
cv2.imshow('HelloWorld', cvim2disp)
cv2.waitKey() #image will not show until this is called
cv2.destroyWindow('HelloWorld') #make sure window closes cleanly
当我执行这些代码时。图像会显示在弹出窗口中,但我无法通过单击右上角的 x 来关闭此窗口,稍后系统会提示我该窗口没有响应,它会给我两个选择:"等待”,“退出”。如果我点击等待,那么稍后它会显示相同的提示,如果我点击'fore quit',那么jupyter notebook内核就会死掉,我必须重新开始。
我google了一下,很多解决方案建议我应该添加这段代码
cv2.startWindowThread()
在imshow 之前,但情况变得更糟,内核永远挂起!。
任何人都知道发生了什么。
【问题讨论】:
-
cv.imshow在像 Jupyter 这样的客户端/服务器环境中并没有什么意义。您想要将图像显示为笔记本的一部分(在客户端)的东西,而不是在服务器端运行 GUI 窗口——当客户端和服务器在同一台机器上时,这可能有点“工作”,但是就是这样。 |您已经使用了 matplotlib 中的imshow函数(不像您认为的那样 numpy),所以请坚持使用(请记住,它使用 RGB 而不是 BGR 颜色平面的顺序)。 -
你找到解决方案了吗,我也遇到了同样的问题,我用过很多次opencv,所以不是waitkey问题。它只发生在程序完成之前的最后一个 imshow() ,因此您显示和销毁窗口,直到您需要关闭最后一个窗口(即使它与之前的所有窗口相同,例如循环中的最后一次迭代)。
标签: python opencv ubuntu jupyter-notebook