cv2.imshow()在不同的屏幕上

问题描述:

在使用OpenCV的Python脚本中,我想在不同的屏幕/显示器上打开命名窗口。cv2.imshow()在不同的屏幕上

我在Linux上,X被设置为有两个显示器。通过将环境变量DISPLAY分别设置为:0.0:0.1,我可以控制默认打开的窗口名称。但是,我想要做的是在:0.0上打开一个命名窗口,并在:0.1上打开一个命名窗口,并且能够连续更新每个窗口。

我发现Xlib,它让我查询例如哪一个是默认屏幕,但我无法更改它。另外,我可以更新像os.environ['DISPLAY'] = ':0.0'这样的环境变量,但不出意外,这对于之后打开的窗口没有任何影响。

使用multiprocessing.Process似乎有伎俩。以下将显示:0.0:0.1显示屏上的图片:

import os 
import time 
from multiprocessing import Process 
import cv2 

def f(display): 
    os.environ['DISPLAY'] = display 
    print(os.environ['DISPLAY']) 
    a = cv2.imread('avatar.png') 
    cv2.imshow('window on %s'%display, a) 
    cv2.waitKey(1000) 
    time.sleep(10) 

Process(target=f, args=(':0.0',)).start() 
Process(target=f, args=(':0.1',)).start()