python OpenCV UI 마우스 이벤트 예제
폰 포스트는 python에서 OpenCV.setMouseCallback를 사용하여 마우스 이벤트를 사용하는 예제코드를 싣고 있다.
OpenCV.setMouseCallback는 지정된 윈도우에 마우스 이벤트 콜백 함수를 등록하는데 사용된다.
https://docs.opencv.org/master/d7/dfc/group__highgui.html#ga89e7806b0a616f6f1d502bd8c183ad3e
콜백 함수는 다음과 같은 형식을 가진다.
typedef void(* cv::MouseCallback) (int event, int x, int y, int flags, void *userdata)
마우스의 이벤트는 클릭, 더블클릭, 휠 및 마우스 이동 등을 지원한다.
- cv.EVENT_MOUSEMOVE
- cv.EVENT_LBUTTONDOWN
- cv.EVENT_RBUTTONDOWN
- cv.EVENT_MBUTTONDOWN
- cv.EVENT_LBUTTONUP
- cv.EVENT_RBUTTONUP
- cv.EVENT_MBUTTONUP
- cv.EVENT_LBUTTONDBLCLK
- cv.EVENT_RBUTTONDBLCLK
- cv.EVENT_MBUTTONDBLCLK
- cv.EVENT_MOUSEWHEEL
- cv.EVENT_MOUSEHWHEEL
마우스 이벤트 처리 예제 코드는 아래와 같다.
특정 폴더내의 이미지 파일 리스트를 생성하고, 마우스 클릭하면 다음 이미지로 넘어가며 화면에 출력하는 예제이다.
import cv2 as cv
import os
class show_imgs(object):
def __init__(self,path='./',title='images'):
self.title = title
self.path = path
file_list = os.listdir(path)
self.image_list = [file for file in file_list if
file.endswith('.png') or file.endswith('.jpg')]
self.image_index = 0
cv.imshow(self.title, cv.imread(self.path +
self.image_list[self.image_index]))
def show_next(self):
self.image_index += 1
if self.image_index >= len(self.image_list):
self.image_index = 0
cv.imshow(self.title, cv.imread(self.path +
self.image_list[self.image_index]))
def mouse_event_handle(event,x,y,flags,param):
if event == cv.EVENT_LBUTTONDOWN:
param.show_next()
def mouse_event_example():
imgs = show_imgs(path='./zoo/')
cv.setMouseCallback(imgs.title,mouse_event_handle,imgs)
cv.waitKey(0)
cv.destroyAllWindows()
댓글
댓글 쓰기