So zeigen Sie ein Bild in full screen borderless Fenster in openCV
Möchte ich ein Bild in OpenCV in a full screen borderless window.
In anderen Worten, nur die Pixel im Bild erscheint, ohne Menü, Symbolleiste oder im Fenster-hintergrund.
Mit imshow()
oder cvShowImage()
nicht aktivieren:
- Das Fenster wächst auf Vollbild
in der Breite aber nicht in der Höhe. Es findet paar Pixel. - Ich konnte es nicht lassen randloser auch durch ändern der Einstellungen der Fenster
hf.
Ich denke, dass das problem wurzelt in cvNamedWindow()
Methode, die erstellt main WS_OVERLAPPED
Fenster, dann schafft ein Kind und alle Funktionen wie imshow()
oder cvGetWindowHandle()
wirken auf das Kind.
Damit auch windows-Befehl:
SetWindowLong((HWND)cvGetWindowHandle(winName), GWL_STYLE, WS_VISIBLE | WS_EX_TOPMOST | WS_POPUP);
Nicht helfen, da das Kind kann nicht randlos WS_POPUP
. Jemand ein workaround?
- Vielleicht, zeigen opencv mat Fenster
ohne Verwendung von opencv integrierten Methoden - Oder irgendeine Art von windows-trick
P. S. ich habe versucht den folgenden code:
cvMoveWindow("AAA",0,0);
cvSetWindowProperty("AAA", CV_WINDOW_FULLSCREEN, CV_WINDOW_FULLSCREEN);
//Also I tried this:
HWND hwnd = (HWND)cvGetWindowHandle("AAA");
RECT windowRect;
windowRect.left = 0;
windowRect.top = 0;
windowRect.right = cxScreen; //Display resolution
windowRect.bottom = cyScreen; //Display resolution
AdjustWindowRect(&windowRect,WS_VISIBLE,false);
long p_OldWindowStyle = SetWindowLongPtr(hwnd,GWL_STYLE,WS_POPUP);
SetWindowPos(hwnd,HWND_TOP,0,0,windowRect.right,windowRect.bottom,SWP_FRAMECHANGED | SWP_SHOWWINDOW);
SetWindowLong(hwnd, GWL_STYLE, WS_VISIBLE | WS_EX_TOPMOST | WS_POPUP);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ausgestellt
cvShowImage()
um das Fenster aufzurufen? Weil es scheint, Sie tun es nicht. Sowieso, möchten Sie vielleicht aufrufen der win32-API für diese statt, so rufen SieShowWindow(hwnd, SW_SHOW);
nachSetWindowPos()
.Wenn Ihr den aktuellen Anruf zu
SetWindowPos()
nicht den trick tun, überprüfen Sie diese Antwort: Verbergen Rand des Fensters, wenn ich weiß, dass ein handle auf dieses FensterEmpfehle ich Sie tun Sie Ihre tests ohne Aufruf
cvSetWindowProperty()
auf den ersten, nur um sicherzustellen, dass Sie finden können, eine Methode, die funktioniert.Nur einen Hinweis, wenn Sie das Kontrollkästchen
modules/highgui/src/window_w32.cpp
können Sie sehen, wie OpenCV erstellt von windows auf Windows.BEARBEITEN:
Der folgende code implementiert die Tipps, die ich gab vor und umgeht die Probleme, die OP berichtet. Der trick ist, NICHT mit
cvGetWindowHandle()
zum abrufen der windows-handle und die Nutzung direkt win32 API für die:FindWindow()
Diesem code wird das Fenster erstellt von OpenCV Grenzenlos, aber Sie möglicherweise noch zu optimieren, eine Sache oder eine andere zu machen, diesen Vorgang perfekte. Sie werden sehen, warum. Eine Idee ist, um die Größe des Fensters und stellen Sie die Größe des Bildes.
BEARBEITEN:
Gut, da du sagtest:
Entschied ich mich auch zu diesem letzten Teil für Sie, da bin ich so ein netter Kerl =]
Dies ist eine kleine Verbesserung der code oben:
Und auf meinem system zeigt es genau das, was Sie gefragt auf die Frage.