OpenCV (Python) setMouseCallback 阻止程序终止

1 投票
2 回答
1615 浏览
提问于 2025-04-18 08:10

我在用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 

撰写回答