OpenCV (Python) setMouseCallback 阻止程序终止
我在用Python写一个程序,使用了OpenCV库。到目前为止,我还没有设置鼠标回调函数(cv2.setMouseCallback)。为了退出这个全屏程序,我会按ESC键(第70行)。
最近我添加了一个鼠标回调函数(第11行),它运行得很好,但现在当我按ESC键时,程序没有像之前那样退出。虽然while循环结束了,并且调用了cv2.destroyAllWindows()和sys.exit(0),窗口确实关闭了,但在命令提示符中没有返回任何提示(也就是启动Python程序的地方)。
我第一时间想到可能是有一个线程没有停止,但我的代码里没有线程,而且调用onMouse函数的线程(第50行)和主循环的线程是同一个,也就是说,OpenCV似乎并没有为鼠标回调设置单独的线程。
我的代码可以在这里找到:http://pastie.org/9246511
我现在很困惑,任何帮助都非常感谢。
请注意:你需要插入一个摄像头才能测试这段代码
2 个回答
0
如果你还没找到答案的话……我刚好也遇到了同样的问题。结果发现是因为在我的配置文件里(运行/调试配置)我勾选了“之后显示命令行”这个选项。一旦我把这个选项取消勾选,窗口就正常关闭了。
0
你的代码在命令行中作为脚本运行时,以及在Pycharm中使用 sys.exit()
时,似乎都能正常退出。
如果你是在 Ipython
中运行代码,你需要使用 exit()
来返回到命令提示符:
只需在 cv2.destroyAllWindows()
之后使用 exit()
,这样程序就会结束。
In [1]: type(exit)
Out[1]: IPython.core.autocall.ExitAutocall