Python OpenCV - 이벤트 처리

BANG·2020년 11월 28일
0

OpenCV

목록 보기
11/16

키보드 입력받기

import numpy as np
import cv2
 
width, height = 512, 512
x, y, R = 256, 256, 50
direction = 0 # right
 
while True:   
    # waitKey(키 입력 대기시간, ms)
    # 리턴값은 키보드로 입력한 키값의 아스키 코드
    key = cv2.waitKey(30)    
    if key == 0x1B: 
        break;
    
# 방향키 방향전환 
    elif key == 0x270000: # right
        direction = 0
    elif key == 0x280000: # down
        direction = 1
    elif key == 0x250000: # left
        direction = 2
    elif key == 0x260000: # up
        direction = 3
        
# 방향으로 이동 
    if direction == 0:     # right
        x += 10
    elif direction == 1:   # down
        y += 10
    elif direction == 2:   # left
        x -= 10
    else: # 3, up
        y -= 10
        
#   경계확인 
    if x < R:
        x = R
        direction = 0
    if x > width - R:
        x = width - R
        direction = 2
    if y < R:
        y = R
        direction = 1
    if y > height - R:
        y = height - R
        direction = 3
        
# 지우고, 그리기        
    img = np.zeros((width, height,3), np.uint8) + 255 # 지우기
    cv2.circle(img, (x, y), R, (0, 0, 255), -1) 
    cv2.imshow('img', img)
    
cv2.destroyAllWindows()

마우스 입력받기

import numpy as np
import cv2
 
# 마우스 입력 값에 따라 어떤 동작을 실행할 것인지 지정하는 함수
# event : 마우스 이벤트 타입
# x, y : 마우스 이벤트의 x, y좌표
# flags : 마우스 이벤트가 발생할 때 키보드 또는 마우스 상태
# param : 콜백 함수에 전달된 데이터(마우스 이벤트)
def onMouse(event, x, y, flags, param):
##    global img
    
    # 마우스 왼쪽 버튼을 누른 경우
    if event == cv2.EVENT_LBUTTONDOWN:
        # Shift 키를 누른 경우
        if flags & cv2.EVENT_FLAG_SHIFTKEY:	
            cv2.rectangle(param[0], (x-5, y-5), (x+5, y+5), (255, 0, 0))	# 파란 사각형 그리기
        else:
            cv2.circle(param[0], (x, y), 5, (255, 0, 0), 3)	# 파란 원 그리기
            
    # 마우스 오른쪽 버튼을 누른 경우
    elif event == cv2.EVENT_RBUTTONDOWN:	
        cv2.circle(param[0], (x, y), 5, (0, 0, 255), 3)    # 빨간 원 그리기
        
    # 마우스 왼쪽 버튼을 더블클릭하는 경우
    elif event == cv2.EVENT_LBUTTONDBLCLK:	
        param[0] = np.zeros(param[0].shape, np.uint8) + 255
        
    cv2.imshow("img", param[0])
 
# 하얀 배경 생성
img = np.zeros((512,512,3), np.uint8) + 255
 
cv2.imshow('img', img)	# 이미지 보여주기
 
# img란 GUI창위에 onMouse란 콜백 함수를 이용하여, 데이터 전달하기
# [img] : onMouse란 콜백 함수에 전달할 데이터
# 마우스 이벤트가 입력되면 사전에 작성한 함수를 불러와서 작동
cv2.setMouseCallback('img', onMouse, [img])	# 마우스 콜백 함수
cv2.waitKey()
cv2.destroyAllWindows()
profile
Record Everything!!

0개의 댓글