2015-07-10 123 views
13

执行包含以下内容的OpenCV python脚本时,生成的窗口在我的终端窗口后面打开。这是一个轻微的刺激 - 有没有什么办法让它最初在前面/顶部打开?在其他应用程序之上的Python OpenCV打开窗口

许多人询问关于强制持续行为的问题(herehere),但我认为这更简单。

平台OS X和OpenCV 2.4.11

+0

我正在使用“键盘mastro”mac应用程序来执行此操作。首先在keyboard mastro中设置一个热键作为前面的活动“python”应用程序,并使用字符串键“opencvwindowinthefront”。然后,在python脚本,进口OS CMD = “” “ osascript -e '告诉应用程序 ”系统事件“ 击键 ”openvwindowinthefront“' ”“” 使用os.system(CMD) –

回答

4

打开namedWindowimshow,例如前:

cv2.namedWindow('ImageWindowName', cv2.WINDOW_NORMAL) 
cv2.imshow('ImageWindowName',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

评论,如果这使得任何不同。

+0

这对我没有任何影响。窗户仍然像以前一样打开。 Anaconda Python 3.5,opencv 3.2.0,Mac OS X Sierra 10.12.5。相反,请参阅此主题https://stackoverflow.com/a/8775078/4259243。打开窗口后,运行'os.system('''/ usr/bin/osascript -e'告诉应用程序“Finder”将进程“python”的最前面设置为真'''')。 – sh37211

2

我能做什么,我想你想通过添加一行到OpenCV的分配以下文件:

modules/highgui/src/window_cocoa.mm 

它是围绕线568,并且在字SETCHELL后的单行代码如下:

[window setFrameTopLeftPoint:initContentRect.origin]; 

    [window setFirstContent:YES]; 

    [window setContentView:[[CVView alloc] init]]; 

    [window setHasShadow:YES]; 
    [window setAcceptsMouseMovedEvents:YES]; 
    [window useOptimizedDrawing:YES]; 
    [window setTitle:windowName]; 
    [window makeKeyAndOrderFront:nil]; 

// SETCHELL - raise window to top of stacking order 
[window setLevel:CGWindowLevelForKey(kCGMaximumWindowLevelKey)]; 

    [window setAutosize:(flags == CV_WINDOW_AUTOSIZE)]; 

    [windows setValue:window forKey:windowName]; 

    [localpool drain]; 
    return [windows count]-1; 
} 

CV_IMPL int cvWaitKey (int maxWait) 
{ 
+0

真棒:)有可能只用python api就可以做到这一点吗? – arnaud576875

+0

@ arnaud576875我认为Python只是在Mac上调用这个Objective-C API。所以,如果你使用Python,最终会被调用。 –

1

解决此问题的一种方法是使用AppleScript设置OpenCV“最前面”的所有窗口。

subprocess.call(["/usr/bin/osascript", "-e", 'tell app "Finder" to set frontmost of process "Python" to true']) 

这样,所有的窗户应提请前面。

+0

我无法测试这个,因为我不在我的MacBook上...... – pradyunsg

相关问题