OpenCV:如何强制图像窗口出现在其他窗口的顶部?

使用cvShowImage ,可以在OpenCV中轻松显示图像。 但是,您如何告诉OpenCV在每个其他窗口的顶部显示窗口?

我在显示图像时运行全屏OpenGL应用程序。 第一次OpenCV窗口弹出我的应用程序窗口,但如果我点击我的应用程序的窗口(即重点关注它),那么我无法让OpenCV回到顶部OpenGL窗口,即使在销毁和重新创建窗口时也是如此。

我想过每次重命名窗口,但还有其他办法吗?

OpenCV没有本地方法来做到这一点 (我知道)。

答案取决于平台。 如果你的目标是Windows,请检查这个答案 ,然后这个 , 这肯定是有用的。

如果您使用的是Linux,则需要了解OpenCV的编译方式,并检查其构建的系统(可能是GTK + 2.x)。 然后,做一些你自己的研究。

好吧,我认为它适用于OSX和Windows。 您只需要创建一个全屏窗口并在很短的时间内显示它,然后您的OpenCV的下一个窗口将在前面。 所以,首先要打开一个全屏窗口:

 cv::namedWindow("GetFocus", CV_WINDOW_NORMAL); cv::Mat img = cv::Mat::zeros(100, 100, CV_8UC3); cv::imshow("GetFocus", img); cv::setWindowProperty("GetFocus", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN); waitKey(1); cv::setWindowProperty("GetFocus", CV_WND_PROP_FULLSCREEN, CV_WINDOW_NORMAL); destroyWindow("GetFocus"); 

然后你可以打开实际显示图像的花药窗口:

 Mat your_image = ...; cv::namedWindow("ShowImg"); cv::imshow("ShowImg", your_image); 

这个对我有用。

在MAC-OSX(El Capitan)OpenCV 3.1.0上,调用moveWindow似乎将窗口移到了顶部。

我的OSX解决方案是修改我的OpenCV代码(版本2.4.8),特别是highgui / src目录中的文件windows_cocoa.mm。

如果您只想将新窗口置于前面而不使其处于活动状态,请在windows_cocoa.mm中的函数cvNamedWindow()结尾之前添加以下行:

 [window orderFrontRegardless]; 

要强制新窗口始终处于活动状态,请添加以下行:

 [application activateIgnoringOtherApps:YES]; 

它可能不是所有窗户的最佳选择,但适用于我的情况。 我厌倦了总是不得不通过点击它们让它们活跃起来将它们带到前面。