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 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

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

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

python ctypes LoadLibrary로 windows dll 로드 및 함수 호출 예제