카테고리 없음

opencv - 7일차

judy9710 2020. 2. 28. 10:30

어제에 이어서 Mouse Click Event 에 관한 예시를 더 살펴봤다.

 

import numpy as np

import cv2

 

def click_event(img, x,y, flags, params):

    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img, (x,y), 3, (0,0,255), -1)
        cv2.imshow('image', img)

img = np.zeros((512,512,3), np.uint8)
cv2.imshow('image', img)
points = []
cv2.setMouseCallback('image', click_event)

cv2.waitKey(0)
ev2.destroyAllWindows()

 

 

원을 그리는 함수 cv.circle 을 이용한다

 

파라미터로는

첫번째: 배경 이미지

두번째: x y 좌표 which will be 원의 중심

세번째: 원의 반지름

네번째: BGR 색상

다섯번째: thickness 인데 -1이면 원이 다 색으로 채워진다는 것

 

 

하트를 그려봤다

 

 

 

이를 조금 더 응용해서 점을 찍는 두 좌표를 연결하는 코드를 작성해보면,

 

import numpy as np
import cv2

def click_event(event, x, y ,flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img, (x,y), 3, (0,0,255), -1)
        points.append((x,y))
        if len(points) >= 2:
            cv2.line(img, points[-1], points[-2], (255,0,0), 5)            
        cv2.imshow('image', img)
        

img = np.zeros((512,512,3), np.uint8)
cv2.imshow('image', img)
points = []
cv2.setMouseCallback('image', click_event)

cv2.waitKey(0)
ev2.destroyAllWindows()

 

points 라는 리스트를 만들어서 마우스 클릭할 때마다 배열형태로 그 좌표를 저장하고, 

그 길이가 2 이상이면 두 점 사이에 line을 만든다

 

cv.line 메소드는 우리가 앞에서 배웠던 함수고 파라미터는

그리고자 하는 이미지, 좌표1, 좌표2, 색상, 두께 이다.

 

 

이번에는 바탕이 검정색이 아닌, 칼라 사진을 가지고 와서 마우스 클릭할 때마다 그 좌표의 BGR 채널 색상을 리턴하는 함수를 만들자

 

 

import numpy as np
import cv2

def click_event(event, x, y ,flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        blue = img[x,y,0]
        green = img[x,y,1]
        red = img[x,y,2]
        cv2.circle(img, (x,y), 3, (0,0,255), -1)
        mycolorImage = np.zeros((512,512,3), np.uint8)

        mycolorImage[:] = [blue, green, red]

        cv2.imshow('color', mycolorImage)
        

img = cv2.imread('lena.jpg')
cv2.imshow('image', img)
cv2.setMouseCallback('image', click_event)

cv2.waitKey(0)
ev2.destroyAllWindows()

 

 

마찬가지로 BGR 채널의 값을 알아내고, color 이라는 창에 클릭한 좌표의 특정한 BGR 값이 출력되는 함수이다. 

 

 

출처) opencv python tutorial for beginners 9 - mouse handling event