你会以为我在问这个世界,但我只想让一个用户在openCV窗口中点击closex,然后让程序识别它。在
这似乎并不容易,经过四天的周旋,我发现如何在windows机器上实现这一点,我还没有找到如何使用Python在Raspberry Pi上实现这一点。在
我想我需要获得openCV窗口的句柄(怎么做?)然后用它来查看窗口是否仍然可见(什么调用?)如果不是的话,就停止诉讼(我可以这么做)。在
我尝试过cvGetWindowHandle(“window_name”),但我已经下载了源代码,而GetWindowHandle似乎无法从python获得。在
在这个循环中,它是如何被循环捕获的:
getWindowProperty
文档不多,但正如其名称所示,它的作用是返回给定窗口的属性。两个感兴趣的标志是WND_PROP_FULLSCREEN
(或0)和WND_PROP_AUTOSIZE
(或1)。当窗口关闭时,函数返回-1。使用此选项可以立即中断循环(如果不在循环中,则关闭窗口)。在参考文献:
捕捉鼠标左键单击事件并关闭窗口的代码相当简单:
有一个关于如何使用button click事件here的教程,这是我学习该代码的地方,它提供了一个完整的python工作示例。在
但是,您可能在Rpi上运行一个基于unix的系统,因此需要读取This answer,因为您需要一个{}的组合才能工作。在
我可能有一个解决方案,但我不能百分之百肯定,所以你必须自己检查:)我假设OpenCV在下面使用X11(如果没有任何一个是有意义的)。使用X11,您可以:
1)找到OpenCV窗口的X11窗口句柄,如here
2)使用
XSelectInput
钩住它的事件循环,有点类似于here。我假设您应该使用StructureNotifyMask
作为掩码来获取XDestroyWindowEvent
事件。运行X11事件循环,一旦得到相应的事件,就可以调用OpenCVdestroyWindow
函数。在这个建议是基于假设的,我不能保证它会起作用,但据我所知,如果OpenCV不是用其他特定的窗口管理器构建的,那么它应该可以工作。据我所知,Raspbian是和X11一起运到某个地方的,然后它就转到了Wayland。如果你有一个Wayland的图像,那么这可能行不通(我很抱歉,我的Linux技能不包含如何确定哪一个是的方法)使用:D). 在
更新
实际上,经过更多的阅读之后,我似乎觉得gtk应该能够处理下面正在使用的任何东西(X11/Wayland)。因此,如果您安装gtk开发库,您还应该能够连接到windows删除信号,如所述here。唯一的问题是如何获得窗口句柄。在
我个人的建议-使用Qt或其他一些GUI友好的框架来呈现OpenCV图像,而不是直接用OpenCV来实现。OpenCV是一个图像处理框架,但是IMHO highgui对于任何严肃的事情都是不可用的。在
相关问题 更多 >
编程相关推荐