728x90
반응형
SMALL
1. 키보드 이벤트
- cv2.waitKey(delay)
- delay: 밀리초(ms) 단위 대기(0보다 작거나 같으면 무한정 기다림, 기본값 0)
- return: 눌려진 아스키 코드값(ESC: 27, ENTER: 13, TAB: 9 ..)
import cv2
img = cv2.imread('dog.bmp')
cv2.imshow('img',img)
# 화면 띄우고 키가 들어오기 전까지 띄워짐
# 매개변수가 주어지지 않을 때 무한정 기다림
# cv2.waitKey()
while True:
keyvalue = cv2.waitKey()
# ord(): 아스키코드값을 리턴
if keyvalue == ord('i') or keyvalue == ord('I'):
img = ~img # 색상값을 반전
cv2.imshow('img', img)
elif keyvalue == 27:
break
2. 마우스 이벤트
- cv2.setMouseCallback(윈도우이름, 콜백함수, 파라미터)
- 윈도우이름: 마우스 이벤트를 처리할 윈도우의 이름(창의 이름)
- 콜백함수: 마우스 이벤트가 발생할 때 호출될 콜백함수를 설정
- 파라미터: 콜백함수에 전달할 추가적인 정보
# 콜백함수
def 함수명(event, x, y, flags, param):
pass
- event: 어떤 이벤트가 실행되는지에 대한 객체
- x, y: 마우스의 x, y 좌표
- flags: 마우스 버튼이 눌리고 있는지 떼어졌는지 여부
- param: 추가적인 정보가 전달되었다면 저장
✅ 빈 흰색 창에서 마우스 이벤트로 그림 그리기
import cv2
import numpy as np
# 전역변수
oldx = oldy = 0
def on_mouse(event, x, y, flags, param):
global oldx, oldy # 전역변수를 지역변수로 사용하기 위해
if event == cv2.EVENT_LBUTTONDOWN: # 왼쪽 마우스 버튼이 눌렸다면
oldx, oldy = x, y # 이벤트가 실행된 좌표가 oldx, oldy에 저장
print('왼쪽 버튼이 눌렸어용: %d, %d' %(x, y))
elif event == cv2.EVENT_LBUTTONUP: # 왼쪽 마우스 버튼이 떼어졌다면
print('왼쪽 버튼이 떼었어용: %d, %d' %(x,y)) # 마우스를 뗀 부분의 좌표가 찍힘
elif event == cv2.EVENT_MOUSEMOVE: # 마우스가 움직인다면
if flags & cv2.EVENT_FLAG_LBUTTON: # flag:이벤트가 실행되고있는지(True), 계속 왼쪽 버튼이 눌리고있는지
cv2.line(img, (oldx, oldy), (x,y), (255, 51, 255), 3)
cv2.imshow('img', img)
oldx, oldy = x, y # 갱신
# 컬러 이미지(255로 채워진 흰색 이미지)
img = np.ones((500, 500, 3), dtype=np.uint8)* 255
cv2.namedWindow('img') # 창에 대한 이름을 줄 때
cv2.setMouseCallback('img', on_mouse, img) # 파라미터로 img 객체를 넘김
cv2.imshow('img', img)
cv2.waitKey()
728x90
반응형
LIST
'Python > Computer Vision' 카테고리의 다른 글
[파이썬, Python] OpenCV - 컬러 영상과 색상 정보 (0) | 2023.08.24 |
---|---|
[파이썬, Python] OpenCV - 영상의 화소 처리 (0) | 2023.08.24 |
[파이썬, Python] OpenCV - 동영상 처리하기! (0) | 2023.08.23 |
[파이썬, Python] OpenCV - 영상에 도형 그리기! (0) | 2023.08.04 |
[파이썬, Python] OpenCV - 영상(Image)과 영상의 입출력, 복사하기 (0) | 2023.07.24 |