

Qt CreatorでC++で開発をしています．  
プロジェクションマッピング用の画像をQtで作成後すぐに接続したプロジェクタで投影したいのですが，自動化の方法が分かりません．作業用のデスクトップと投影用のデスクトップを分けたいので今は画像ウィンドウを作業用デスクトップに表示し，画面の右にドラッグして外部スクリーン上で最大化しています．

[code]

    import tkinter as tk
    import cv2
    from PIL import Image, ImageTk
    import pyautogui as pag
    
    scr_w,scr_h= pag.size()
    
    root = tk.Tk()
    w = scr_w # 横の長さ
    h = scr_h # 縦の長さ
    x = scr_w # 座標軸x
    y = 0 # 座標軸y
    
    root.geometry('%dx%d+%d+%d' % (w,h, x, y))
    
    result = cv2.imread("/Users/hoge/Desktop/result_pmi.png")
    height, width, ch = result.shape
    rgb_cv2_image = cv2.resize(result, dsize=(int(h/height*width),scr_h))
    rgb_cv2_image = cv2.cvtColor(rgb_cv2_image, cv2.COLOR_BGR2RGB)
    
    pil_image = Image.fromarray(rgb_cv2_image)
    tk_image = ImageTk.PhotoImage(pil_image)
    
    canvas = tk.Canvas(root, bg="white", height=h, width=w)
    canvas.create_image((w-int(h/height*width))/2, 0, image=tk_image, anchor=tk.NW)
    canvas.place(x=0, y=0)
    root.attributes('-fullscreen', True)
    root.mainloop()
    
[/code]

このpythonプログラムを  
`std::system("/opt/anaconda3/bin/python ./test.py")`  
で呼び出します

ここまでで外部スクリーンに表示することはできたのですが，scr_w,scr_h=
pag.size()が得るのは外部スクリーンのサイズではなく作業用デスクトップのサイズなので外部スクリーン上で画面いっぱいに画像を表示することができません．


CC BY-SA 4.0
2022-09-24T12:40:57.553
91279
2022-09-26T07:05:29.843
2022-09-25T11:56:00.820
54517
54517
question
opencv qt qt-creator
自動で画像を外部スクリーンにフルスクリーンで表示するには


screeninfoでマルチモニターのサイズを取得し，画像サイズをフルスクリーンに適応させることができました

[code]

    import tkinter as tk
    import cv2
    from PIL import Image, ImageTk
    import pyautogui as pag
    import screeninfo
    import re
    import sys
    
    
    m = screeninfo.get_monitors()
    print(m)
    m = str(m)
    scr_w = re.findall("width=\d+",m)
    scr_h = re.findall("height=\d+",m)
    scr_w = re.findall("\d+",scr_w[1])
    scr_h = re.findall("\d+",scr_h[1])
    
    scr_w,scr_h = int(scr_w[0]),int(scr_h[0])
    
    root = tk.Tk()
    def close(event): #escキーで閉じる
        root.withdraw() # if you want to bring it back
        sys.exit() # if you want to exit the entire thing
    
    root.bind('<Escape>', close)
    w = scr_w # 横の長さ
    h = scr_h # 縦の長さ
    x = scr_w # 座標軸x
    y = 0 # 座標軸y
    
    root.geometry('%dx%d+%d+%d' % (w, h, x, y))
    
    result = cv2.imread("/Users/hoge/Desktop/result_pmi.png")
    height, width, ch = result.shape
    rgb_cv2_image = cv2.resize(result, dsize=(int(h/height*width),scr_h))
    rgb_cv2_image = cv2.cvtColor(rgb_cv2_image, cv2.COLOR_BGR2RGB)
    
    pil_image = Image.fromarray(rgb_cv2_image)
    tk_image = ImageTk.PhotoImage(pil_image)
    
    canvas = tk.Canvas(root, bg="black", height=h, width=w)
    canvas.create_image((w-int(h/height*width))/2, 0, image=tk_image, anchor=tk.NW)
    canvas.place(x=0, y=0)
    root.attributes('-fullscreen', True)
    root.mainloop()
    
[/code]


CC BY-SA 4.0
2022-09-26T07:05:29.843
91307
2022-09-26T07:05:29.843
54517
91279
answer