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

https://docs.opencv.org/master/d0/d90/group__highgui__window__flags.html#ga927593befdddc7e7013602bca9b079b0


마우스 이벤트 처리 예제 코드는 아래와 같다.

특정 폴더내의 이미지 파일 리스트를 생성하고, 마우스 클릭하면 다음 이미지로 넘어가며 화면에 출력하는 예제이다.

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()




댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

Embedded Linux USB Ethernet Gadget 사용하기

python winsound를 이용한 윈도우 환경에서 소리 재생 예제

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제