2015-07-10 111 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

相關問題