Maxima's Lab

[Python, Opencv] Mouse Event (마우스 이벤트) 본문

Python/Opencv

[Python, Opencv] Mouse Event (마우스 이벤트)

Minima 2022. 7. 6. 23:56
728x90
SMALL

안녕하세요, 오늘은 Opencv를 활용한 Mouse Event (마우스 이벤트)를 사용하는 방법에 대해서 알아보도록 하겠습니다.

마우스 이벤트를 활용하여 구현해볼 예시는 다음과 같습니다.

 

1. Mouse의 왼쪽 버튼을 누르는 이벤트를 발생 시 해당 위치 정보를 저장하여 시각화

2. Mouse의 왼쪽 버튼을 누르는 이벤트를 발생 시 기존 Original Image에 있었던 도형을 지우며, 지워진 도형에 대한 위치 정보를 저장하여 시각화

 


Mouse Event 중 cv2.EVENT_LBUTTONDOWN과 cv2.EVENT_MOUSEMOVE를 이용하여, Black Image에 Mouse의 왼쪽 버튼과 Mouse의 이동에 따른 위치 정보를 White 값으로 시각화하는 예시입니다.

import cv2
import numpy as np

img = np.zeros(shape = (512, 512, 3)).astype("uint8")

def LBEvent(event, x, y, flags, params):
    global prior_x, prior_y
    
    if event == cv2.EVENT_LBUTTONDOWN:
        prior_x, prior_y = x, y
        
    elif event == cv2.EVENT_MOUSEMOVE:
        if flags & cv2.EVENT_FLAG_LBUTTON:
            
            for height_y in range(0, 30):
                for width_x in range(0, 30):
                    img[y + height_y, x + width_x] = 255
            
            cv2.imshow("Original Image", img)
            prior_x, prior_y = x, y
        
        
        
cv2.namedWindow("Original Image")
cv2.resizeWindow("Original Image", 600, 600)

cv2.setMouseCallback("Original Image", LBEvent, img)
cv2.imshow("Original Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

Original Image에 Mouse Event를 활용해 위치 정보를 시각화한 결과

 


다음은 기존의 Original Image에 특정 영역에 Mouse Event를 적용할 경우 해당 영역을 Black 값으로 수정하고 지워진 영역에 대한 위치 정보를 시각화하는 예시입니다.

 

Original Image

 

import cv2
import numpy as np

img = cv2.imread("...")
result_img = np.zeros(shape = img.shape).astype("uint8")

def LBEvent(event, x, y, flags, params):
    global prior_x, prior_y
    
    if event == cv2.EVENT_LBUTTONDOWN:
        prior_x, prior_y = x, y
        
    elif event == cv2.EVENT_MOUSEMOVE:
        if flags & cv2.EVENT_FLAG_LBUTTON:
            
            for height_y in range(0, 10):
                for width_x in range(0, 10):
                    img[y + height_y, x + width_x] = 0
                    result_img[y + height_y, x + width_x] = 255
            
            cv2.imshow("Original Image", img)
            cv2.imshow("Result Image", result_img)
            prior_x, prior_y = x, y
        
        
cv2.namedWindow("Original Image")
cv2.resizeWindow("Original Image", 600, 600)
cv2.namedWindow("Result Image")
cv2.resizeWindow("Result Image", 600, 600)

cv2.setMouseCallback("Original Image", LBEvent, img)
cv2.imshow("Original Image", img)
cv2.imshow("Result Image", result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

다음은, Original Image에 Mouse Event를 적용한 결과입니다.

 

 

위의 결과를 보시면, 좌측 이미지의 Red Rectangle 영역 내 Mouse Event를 적용한 경우 해당 영역은 지워지고, 해당 영역에 대한 위치 정보가 우측 이미지에 시각화된 결과입니다.

 

 

지금까지 Opencv 내 Mouse Event를 활용하여, 해당 위치 정보를 시각화하는 방법에 대해 알아보았습니다.

728x90
LIST
Comments