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




댓글

이 블로그의 인기 게시물

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

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

간단한 cfar 알고리즘에 대해

base64 인코딩 디코딩 예제 c 소스

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기