AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 파이썬
  • 프로그래머스
  • LEVEL2
  • 연습문제
  • 이코테
  • level1
  • OpenCV
  • 알고리즘
  • 백준
  • Python

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV] 기초 5 : 키보드 이벤트/ 마우스 이벤트
OpenCV

[OpenCV] 기초 5 : 키보드 이벤트/ 마우스 이벤트

2022. 1. 30. 22:35

키보드 이벤트 처리하기

✔ 키보드 입력 대기 함수 - cv2.waitKey

cv2.waitKey(delay=None)
  • delay : 밀리초 단위 대기 시간. 
               delay ≤ 0 이면 무한히 기다림. 기본값은 0.

눌린 키 값(ASCII code). 키가 눌리지 않으면 -1을 반환한다.

 

 

참고 사항

  • cv2.waitKey() 함수는 OpenCV 창이 하나라도 있을 때 동작
  • 특정 키 입력을 확인하려면 ord() 함수를 이용
  • 주요 특수키 코드: 27(ESC), 13(ENTER), 9(TAB)
while True:
  if cv2.waitKey() == ord('q'):
  	break

 

 

✔ 키보드 특수키 입력 처리하기

Windows 운영체제에서 방향키,  함수키 등의 특수키 입력은  cv2.waitKeyEx() 함수를 사용한다.

 

 

 

 

💬 실습

- 키보드에서 'i' 또는 'I' 키를 누르면 영상을 반전시키기

 

import cv2
img = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)  
cv2.imshow('image', img)

while True:
    keycode = cv2.waitKey()
    if keycode == ord('i') or keycode == ord('I'):
        img = ~img
        cv2.imshow('image', img)  
    elif keycode == 27:
        break

cv2.destroyAllWindows()

 

 

 

 


마우스 이벤트 처리하기

✔ 마우스 이벤트 콜백함수 등록 함수 - cv2.setMouseCallback

cv2.setMouseCallback(windowName, onMouse, param=None)
  • windowName :  마우스 이벤트 처리를 수행할 창 이름
  • onMouse : 마우스 이벤트 처리를 위한 콜백 함수 이름
                   마우스 이벤트 콜백 함수는 다음 형식을 따라야 한다.
  • param : 콜백 함수에 전달할 데이터

 

✔ 마우스 이벤트 처리 함수(콜백 함수) 형식 - onMouse

onMouse(event, x, y, flags, param)
  • event : 마우스 이벤트 종류. cv2.EVENT_로 시작하는 상수
  • x : 마우스 이벤트가 발생한 x 좌표
  • y : 마우스 이벤트가 발생한 y 좌표
  • flags : 마우스 이벤트 발생 시 상태. cv2.EVENT_FLAG_로 시작하는 상수
  • param : cv2.setMouseCallback() 함수에서 설정한 데이터

 

✔ 마우스 이벤트 처리 함수의 event 인자

MouseEventTypes 열거형 상수 값 설명
cv2.EVENT_MOUSEMOVE 0 마우스가 창 위에서 움직이는 경우
cv2.EVENT_LBUTTONDOWN 1 마우스 왼쪽 버튼이 눌려지는 경우
cv2.EVENT_RBUTTONDOWN 2 마우스 오른쪽 버튼이 눌려지는 경우
cv2.EVENT_MBUTTONDOWN 3 마우스 가운데 버튼이 눌려지는 경우
cv2.EVENT_LBUTTONUP 4 마우스 왼쪽 버튼이 떼어지는 경우
cv2.EVENT_RBUTTONUP 5 마우스 오른쪽 버튼이 떼어지는 경우
cv2.EVENT_MBUTTONUP 6 마우스 가운데 버튼이 떼어지는 경우
cv2.EVENT_LBUTTONDBLCLK 7 마우스 왼쪽 버튼을 더블클릭하는 경우
cv2.EVENT_RBUTTONDBLCLK 8 마우스 오른쪽 버튼을 더블클릭하는 경우
cv2.EVENT_MBUTTONDBLCLK 9 마우스 가운데 버튼을 더블클릭하는 경우
cv2.EVENT_MOUSEWHEEL 10 마우스 휠을 앞뒤로 돌리는 경우
cv2.EVENT_MOUSEHWHEEL 11 마우스 휠을 좌우로 움직이는 경우

 

 

✔ 마우스 이벤트 처리 함수의 flags 인자

MouseEventFlags열거형상수 값 설명
cv2.EVENT_FLAG_LBUTTON 1 마우스 왼쪽 버튼이 눌려져 있음
cv2.EVENT_FLAG_RBUTTON 2 마우스 오른쪽 버튼이 눌려져 있음
cv2.EVENT_FLAG_MBUTTON 4 마우스 가운데 버튼이 눌려져 있음
cv2.EVENT_FLAG_CTRLKEY 8 CTRL 키가 눌려져 있음
cv2.EVENT_FLAG_SHIFTKEY 16 SHIFT 키가 눌려져 있음
cv2.EVENT_FLAG_ALTKEY 32 ALT 키가 눌려져 있음

 

 

💬 실습

- 마우스를 이용한 그림 그리기

import sys
import numpy as np
import cv2


oldx = oldy = -1

def on_mouse(event, x, y, flags, param):
    global oldx, oldy

    if event == cv2.EVENT_LBUTTONDOWN:
        oldx, oldy = x, y
        print('EVENT_LBUTTONDOWN: %d, %d' % (x, y))

    elif event == cv2.EVENT_LBUTTONUP:
        print('EVENT_LBUTTONUP: %d, %d' % (x, y))

    elif event == cv2.EVENT_MOUSEMOVE:
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cv2.line(img, (oldx, oldy), (x, y), (0, 0, 255), 4, cv2.LINE_AA)
            cv2.imshow('image', img)
            oldx, oldy = x, y


img = np.ones((480, 640, 3), dtype=np.uint8) * 255

cv2.namedWindow('image')
cv2.setMouseCallback('image', on_mouse, img)

cv2.imshow('image', img)
cv2.waitKey()

cv2.destroyAllWindows()

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상처리 : 영상의 밝기 조절  (0) 2022.01.31
[OpenCV] 기초 6 : 트랙바  (0) 2022.01.31
[OpenCV] 기초 4 : 카메라와 동영상 처리  (0) 2022.01.30
[OpenCV] 기초 3 : 마스크 / 그리기 함수  (0) 2022.01.30
[OpenCV] 기초 2  (0) 2022.01.30
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바