c ++ - OpenCV vindue i fuldskærm og uden grænser

Indlæg af Hanne Mølgaard Plasc

Problem



I OpenCV, når der vises et billede med:


cvSetWindowProperty("displayCVWindow", CV\_WND\_PROP\_FULLSCREEN, 
CV\_WINDOW\_FULLSCREEN);


Der er en lille grænse omkring det fuldskærme vindue, hvis nogen nogensinde har bemærket. Er der en måde at slippe af med dette?


Skærmbillede, der viser grænsen for vinduet, når den er i fuldskærmstilstand. Bemærk : Skærmbilledet blev beskåret for kun at vise øverste venstre hjørne


Skærmbillede, der viser grænsen for vinduet, når den er i fuldskærmstilstand. ** Bemærk **: skærmbilledet blev beskåret for kun at vise top- venstre hjørne

Bedste reference


OpenCV giver ikke denne mulighed .


Hvis du vil have billedet i fuldskærmstilstand eller flyde rundt uden vindue/grænser, får du 2 valg:



  • Hak vinduet oprettet af OpenCV;

  • Opret vinduet selv ved hjælp af indgående API-opkald.



Hvis du vælger at hakke vinduet, kan du prøve denne kode og erstatte SetWindowLong() opkaldet til:


SetWindowLong(win\_handle, GWL\_STYLE, 0;


Hvis det ikke virker, skal du grave lidt dybere ind i vinduesoprettelsen på Windows.

Andre referencer 1


Problemet er faktisk ikke tilstedeværelsen af ​​en grænse, men vinduets baggrund viser gennem en eller anden grund. Fra hvad jeg forstår, skaber OpenCVs navnWindow faktisk to vinduer, den ene inde i den anden. De 'hvide linjer' er faktisk den gamle baggrundsfarves grå baggrund. Den løsning, jeg brugte, var at ændre baggrundsfarven til farven på den mat, jeg viste via Windows API.


Her er koden jeg plejede at rette op på:


cv::namedWindow("mainWin", WINDOW\_NORMAL);//create new window
cv::setWindowProperty("mainWin",CV\_WND\_PROP\_FULLSCREEN,CV\_WINDOW\_FULLSCREEN);//set fullscreen property
HWND hwnd = FindWindow(0, L"mainWin");//get window through Windows API
SetClassLongPtr(hwnd, GCLP\_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(0, 0, 0)));//set window background to black; you can change the colour in the RGB()