【问题标题】:OpenCV (Python) setMouseCallback preventing program terminationOpenCV (Python) setMouseCallback 防止程序终止
【发布时间】:2014-06-01 08:13:41
【问题描述】:

我一直在使用 OpenCV 在 python 中编写程序。到目前为止,我还没有设置鼠标回调(cv2.setMouseCallback)。要退出程序(全屏),我会按 ESC 键(第 70 行)。

我最近添加了一个鼠标回调(第 11 行),它可以正常工作,但是,现在当我按下 ESC 键时,程序不会像以前那样终止。 while 循环结束,调用 cv2.destroyAllWindows() 和 sys.exit(0)。窗口确实关闭了,在 sys.exit(0) 之后没有执行任何 python 代码,但是在命令提示符中没有返回任何提示(python 程序是在其中启动的)。

我的第一个想法是有一个线程没有停止运行,但是我的代码中没有线程,并且调用 onMouse 函数的线程(第 50 行)与主循环线程相同(即opencv 似乎没有用于鼠标回调的单独线程)。

我的代码可以在这里找到:http://pastie.org/9246511

我很困惑,非常感谢任何帮助。

请注意:您需要插入网络摄像头来测试代码

【问题讨论】:

  • 你是在 ipython 中运行的吗?
  • @PadraicCunningham 不,库存 Python 2.7.6
  • 我运行了你的代码,我可以复制你的错误的唯一方法是在 ipython shell 中运行。你用的是什么操作系统?使用 exit 时,您会得到相同的行为吗?
  • @PadraicCunningham Win32,64 位。我得到了完全相同的行为。我只是在 PyCharm 中运行它,同样的问题。按 ESC 后,程序似乎结束了,但是 PyCharm 仍然报告程序正在运行。
  • Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32

标签: python opencv


【解决方案1】:

当使用sys.exit() 时,您的代码似乎可以从提示符中正确地以脚本形式退出并在 Pycharm 中运行。

如果你在Ipython运行它,你需要使用exit()返回命令提示符:

只需在cv2.destroyAllWindows() 之后使用exit(),它就会终止。

In [1]: type(exit)
Out[1]: IPython.core.autocall.ExitAutocall 

【讨论】:

  • 感谢您的回复!不幸的是,在 cv2.destoryAllWindows() 之后使用 exit() 不起作用。
【解决方案2】:

以防万一您从未得到答案...我也遇到了同样的问题。原来这是因为在我的配置文件(运行/调试配置)中,我检查了“之后显示命令行”框。一旦我取消选中窗口是否被正确杀死。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多