imshow 창설정 및 종료 처리 (x버튼 처리)
창 설정 관련 arguments 및 options
cv2.namedWindow
를 통해 미리 창에 대한 title을 지정하여 놓을 수 있음.
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# Using resizeWindow() : Below code does not works with cv2.WINDOW_AUTOSIZE
# cv2.resizeWindow("image", 300, 700)
cv2.WINDOW_AUTOSIZE
가 기본으로 2nd argument없이 호출시 선택됨.- 읽어들이는 image 크기에 맞춰 window의 크기가 결정됨.
- 2nd argument로
cv2.WINDOW_NORMAL
를 설정시 window의 크기 조정이 가능함.
(마우스로 window의 크기를 조절할 수 있음) cv2.WINDOW_GUI_EXPANDED
로 설정시 확대, 축소 등의 기능을 사용가능한 window가 제공됨
(conda-forge
채널로 설치한 opencv를 사용하거나 이 기능을 활성화하여 컴파일 필요.)- 이는 Qt 를 이용하도록 컴파일한 OpenCV 라이브러리를 사용할 때 제공된다.
conda
등으로 opencv 를 사용할 경우,conda-forge
채널의 opencv를 설치해야 제대로 동작함.
cv2.WINDOW_GUI_NORMAL
로 설정시 "Qt로 추가된 새 기능" 없는 window로 동작함.cv2.WINDOW_KEEPRATIO
로 설정시 종횡비가 유지됨.cv2.WINDOW_NORMAL
과 함께 사용될 수 있음.
참고로, 위의 옵션들은 |
를 통해 여러 개가 동시에 지정 가능함.
High-level GUI : Qt New Functions
cv2.WINDOW_GUI_EXPANDED
의 경우 다음과 같은 기능을 가진 window를 사용 가능함.
위의그림은 Qt GUI를 사용하여 구현된 새로운 기능을 가진 OpenCV의 imshow시 보여지는 windows임.
이 새로운 window는 status bar, toolbar, contorl panel 등을 제공하며 window의 control panel에는 trackbar와 buttonbar를 부착할 수 있음.
- 만약 control panel이 보이지 않는다면, Ctrl+P를 누르거나 Qt 창에서 오른쪽 클릭 후 'Display properties window'를 선택하면 됨.
- button bar를 부착하려면, button을 생성하면 되는데,마지막으로 control pannel에 부착된 bar가 button bar 인 경우, 새 버튼은 마지막 버튼의 오른쪽에 추가됨.
- 마지막으로 부착된 bar가 trackbar이거나, control panel이 비어 있는 경우, 새 button bar가 생성되고, 그 다음에 새 버튼이 추가됨.
이를 이용한 event handling 구현은 다음을 참고할 것.
https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_04/
보다 자세한 건 다음 url참고 : OpenCV's Qt New Functions
사실, 이같은 windows 는 PySide나 PyQt에서 쉽게 구현이 가능하다.
Matplotlib와 PySide가 제공하는 FigureCanvas 와 NavigationToolbar2Qt를 활용하여 이같은 창을 구현하는 것은 다음 URL을 참고할 것.
종료 처리
esc와 x버튼 모두 동작하게 하려면 다음과 같이 수정할 것.
while True:
cv2.imshow('image',img)
key = cv2.waitKey(100)
if key & 0xFF == 27 : # enter ESC
break
# 아래 2개 라인을 추가하여 imshow로 열린 image라는 title의 창의 상단 메뉴 x버튼이 정상동작하게 함.
if cv2.getWindowProperty('image', cv2.WND_PROP_VISIBLE ) <1:
break;
같이 보면 좋은 자료들
2022.10.21 - [Programming] - openCV : cv2.waitKey bug
https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_03/
https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_04/
'Programming > DIP' 카테고리의 다른 글
[DIP] Radial distortion : barrel and pincushion distortions (0) | 2023.09.26 |
---|---|
[DIP] Basic Operations (on a binary image) for Morphological Operations (0) | 2023.05.11 |
[OpenCV] Desired Data Type : ddtype (0) | 2023.04.03 |
[DIP] opencv 에서 H264 encoding error (0) | 2023.02.15 |
[DIP] Kornia 소개 (0) | 2023.02.07 |