Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV在其他应用程序上打开窗口_Python_Macos_User Interface_Opencv - Fatal编程技术网

Python OpenCV在其他应用程序上打开窗口

Python OpenCV在其他应用程序上打开窗口,python,macos,user-interface,opencv,Python,Macos,User Interface,Opencv,执行包含以下内容的OpenCV python脚本时:cv2.imshow(img)结果窗口将在“我的终端”窗口后面打开。这是一种轻微的刺激-有没有办法让它最初在前面/顶部打开 很多人问了一些关于强迫持续性行为的问题,但我认为这更简单 平台OS X和OpenCV 2.4.11在imshow之前打开一个namedWindow,例如: cv2.namedWindow('ImageWindowName', cv2.WINDOW_NORMAL) cv2.imshow('ImageWindowName',i

执行包含以下内容的OpenCV python脚本时:
cv2.imshow(img)
结果窗口将在“我的终端”窗口后面打开。这是一种轻微的刺激-有没有办法让它最初在前面/顶部打开

很多人问了一些关于强迫持续性行为的问题,但我认为这更简单


平台OS X和OpenCV 2.4.11

imshow
之前打开一个
namedWindow
,例如:

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

如果有任何不同,请发表评论。

我可以通过在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)
{

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

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

这样,所有窗口都应该放在最前面。

我正在使用“键盘mastro”mac应用程序来实现这一点。首先用字符串键“OpenCVWindowInFront”将键盘上的热键设置为前面的活动“python”应用程序。然后在python脚本中,导入os cmd=“”osascript-e“告诉应用程序”系统事件”以击键“OpenVWINDOWINTOFFORT”“”os.System(cmd)Awesome:)有没有可能只用python api就可以做到这一点?@arnaud576875我认为python只是在Mac上调用了这个Objective-C api。所以,如果您使用Python,最终还是会调用它。这对我没有影响。窗口仍然像以前一样在下面打开。Anaconda Python 3.5、opencv 3.2.0、Mac OS X Sierra 10.12.5。相反,请查看此线程。打开窗口后,运行
os.system('/usr/bin/osascript-e'告诉应用程序“Finder”将最前面的进程“python”设置为true'')
works。请注意,这在macOS Big Sur 11.1上不起作用。如果遇到错误:
21:62:执行错误:Finder遇到错误:无法将进程“Python”设置为true。(-10006)
,尝试将
Python
更改为
Python
即使有@MingjiangShi的提示对我也不起作用。我得到
21:62:执行错误:Finder得到一个错误:无法将进程“python”设置为true。(-10006)
@Tom我怀疑python进程名既不是python也不是python。可能是python2或python27等其他东西。尝试在活动监视器中找到正确的进程名称,并相应地更改脚本。在我将
python
更改为
python3.7
后对我有效。在“活动监视器”应用程序>“内存”选项卡中查找进程名称。在代码中查找进程名称的另一种方法:(需要安装
psutil
):
pid=os.getpid();过程=psutil.过程(pid);process\u name=process.name()