【问题标题】:Can't show image display windows in openCV无法在openCV中显示图像显示窗口
【发布时间】:2011-06-03 09:50:46
【问题描述】:

我正在使用 openCV python 绑定。我正在尝试使用以下列表显示输出图像:

cv.NamedWindow('display')
cv.MoveWindow('display', 10, 10)
cv.ShowImage('display', cvImage)

但我没有看到任何窗口。

我的平台是 Linux (openSuse 11.4),python-opencv 2.1 和 python 2.7。

【问题讨论】:

  • 附带说明,您可能会考虑使用 PyOpenCV,它是一种更有价值的 Python 绑定。
  • @susmits 谢谢 :) 但是它不适用于发行版存储库。仅从源安装。
  • 这个问题出现在 Linux 中,但在 Windows 系统中没有(至少在 Win 7 中没有)。在 Windows 7 中cv.NamedWindow('...') 立即显示窗口,即使没有cv.WaitKey()

标签: python opencv window


【解决方案1】:

您需要调用 WaitKey 函数来处理事件。查看文档:http://opencv.willowgarage.com/documentation/python/highgui_user_interface.html#waitkey

该函数是HighGUI中唯一可以获取和处理事件的方法,因此需要定期调用它来进行正常的事件处理,除非HighGUI在一些负责事件处理的环境中使用。

只需在代码末尾添加一个 WaitKey(0) 就可以了。

【讨论】:

  • 感谢工作:) 现在我面临另一个问题,我无法在不杀死窗口的情况下杀死它。 DestroyWindow() 似乎不起作用。
  • 一旦你摧毁了一个窗口,你就需要泵送事件。在调用 DestroyWindow('display') 之后,立即添加 WaitKey(1)。这将导致它等待一毫秒,这足够不引人注意,并摆脱窗口。
  • 那行得通,谢谢 :) 我要指出 openCV 的 gui 功能不是很好。通常最好将图像保存到临时文件并在外部查看器中打开图像。
  • 哦,绝对! WaitKey 最大的警告是除非窗口有焦点,否则它不能可靠地泵送事件,所以如果你想在某些应用程序中将控制台和 GUI 连接在一起,请为一些烦恼做好准备:)
【解决方案2】:

除此信息外:WaitKey(1) 不会等待 1 毫秒,而是至少等待 15 毫秒……如果需要,您可以测量。

【讨论】:

  • 具体来说,这取决于平台。例如,在 Windows 上,等待的时间不可能少于执行一次消息循环泵的时间。
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多