[OpenCV] imshow 창설정 및 종료 처리 (x버튼 처리)

2023. 4. 7. 17:37·Programming/DIP
728x90
728x90

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/

 

BME228

Trackbar as the Color Palette 이 문서의 코드는 cv2.imshow가 가능한 local 서버에서 동작하는 jupyter note 등을 대상으로 구현됨. Colab 이나 원격지 서버에서 동작중인 jupyter note등에서는 동작하지 않음. Goal Op

dsaint31.me

 

보다 자세한 건 다음 url참고 : OpenCV's Qt New Functions

 

OpenCV: Qt New Functions

This figure explains new functionality implemented with Qt* GUI. The new GUI provides a statusbar, a toolbar, and a control panel. The control panel can have trackbars and buttonbars attached to it. If you cannot see the control panel, press Ctrl+P or righ

docs.opencv.org

 

사실, 이같은 windows 는 PySide나 PyQt에서 쉽게 구현이 가능하다.

Matplotlib와 PySide가 제공하는 FigureCanvas 와 NavigationToolbar2Qt를 활용하여 이같은 창을 구현하는 것은 다음 URL을 참고할 것.

https://ds31x.tistory.com/245

 

[PySide6] matplotlib 이용하기

matplotlib 이용하기PyQt, PySide에서는 PyQtGraph를 통해서도 graph등을 그릴 수 있으나,대중적으로 사용되는 matplotlib를 이용할 수도 있다.PyQtGraph는 Qt vector 기반의 QGraphicsScene를 통해 상호작용이 가능한

ds31x.tistory.com


종료 처리

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

 

openCV : cv2.waitKey bug

아래 글은 WSL2에서 WSLg의 버전이 낮을 경우 발생함. WSL에서의 2022.10 당시 위의 문제를 해결한 상태임. 다음 글 참조. https://bme808.blogspot.com/2022/10/cv2waitkey-wsl.html cv2.waitkey 가 wsl에서 잘 안동작하던

dsaint31.tistory.com

 

https://ds31x.tistory.com/245

 

[PySide6] matplotlib 이용하기

matplotlib 이용하기PyQt, PySide에서는 PyQtGraph를 통해서도 graph등을 그릴 수 있으나,대중적으로 사용되는 matplotlib를 이용할 수도 있다.PyQtGraph는 Qt vector 기반의 QGraphicsScene를 통해 상호작용이 가능한

ds31x.tistory.com

 

https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_03/

 

BME228

Mouse as a Paint-Brush 이 문서의 코드는 cv2.imshow가 가능한 local 서버에서 동작하는 jupyter note 등을 대상으로 구현됨. Colab 이나 원격지 서버에서 동작중인 jupyter note등에서는 동작하지 않음. Goal OpenCV

dsaint31.me

 

https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_04/

 

BME228

Trackbar as the Color Palette 이 문서의 코드는 cv2.imshow가 가능한 local 서버에서 동작하는 jupyter note 등을 대상으로 구현됨. Colab 이나 원격지 서버에서 동작중인 jupyter note등에서는 동작하지 않음. Goal Op

dsaint31.me

 

 


 

728x90

'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  (1) 2023.02.15
[DIP] Kornia 소개  (0) 2023.02.07
'Programming/DIP' 카테고리의 다른 글
  • [DIP] Radial distortion : barrel and pincushion distortions
  • [DIP] Basic Operations (on a binary image) for Morphological Operations
  • [OpenCV] Desired Data Type : ddtype
  • [DIP] opencv 에서 H264 encoding error
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Private Life (15)
      • Programming (206)
        • DIP (116)
        • ML (35)
      • Computer (120)
        • CE (54)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (368)
        • Signals and Systems (115)
        • Math (176)
        • Linear Algebra (33)
        • Physics (43)
        • 인성세미나 (1)
      • 정리필요. (61)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (7)
        • PET Study 2009 (1)
        • 방사선 장해방호 (5)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Optimization
    SS
    linear algebra
    ML
    cv2
    math
    fourier transform
    random
    Python
    인허가제도
    Vector
    signal_and_system
    Programming
    signals_and_systems
    function
    Term
    Probability
    SIGNAL
    numpy
    opencv
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[OpenCV] imshow 창설정 및 종료 처리 (x버튼 처리)
상단으로

티스토리툴바