Deep Learning/Computer Vision

파이썬 마우스로 이미지에 직접 그리기

해파리냉채무침 2023. 7. 9. 17:05
import cv2
import numpy as np

기본 모듈 임포트

###함수를 윈도우에 나타나는 이미지에 연결##
def draw_circle(event,x,y,flags,param):
    
    if event == cv2.EVENT_LBUTTONDOWN:#왼쪽 버튼이 눌렸다는 의미, 클릭되는 순간 이벤트가 발생
        cv2.circle(img,(x,y),100,(0,255,0),-1) #현재 마우스 위치 찾음, 원반지름100, 색깔은 초록색,-1은 꽉찬원
    #pass #이 함수를 이미지 콜백과 연결할때 자동으로 호출됨, 마우스 위치의x,y는 어디인지 물어봄

cv2.namedWindow(winname='my_draw') #이미지 콜백 연결, 윈도우가 같은 이름을 공유해서 draw_circle로 연결
cv2.setMouseCallback('my_draw',draw_circle)
###
#opencv로 실제이미지 보여주기
img = np.zeros((512,512,3),np.int8) #배경을 조금더 회색빛으로보이게함

while True:
    cv2.imshow('my_draw',img)
    
    if cv2.waitKey(20) & 0xFF == 27: #20초가 지나고 누군가가 esc키를 누르면 이 루프에서 빠져나감
        break
        
cv2.destroyAllWindows()
#클릭할때마다 원이 나타남

새로운창으로 왼쪽클릭할 때마다 초록색 원이 나온다. 코드가 길어서 코드옆에 설명 적음

import cv2
import numpy as np

###함수를 윈도우에 나타나는 이미지에 연결##
def draw_circle(event,x,y,flags,param):
    
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img,(x,y),100,(0,255,0),-1) 
    elif event == cv2.EVENT_RBUTTONDOWN: #마우스 오른쪽 버튼이 눌리면 다른작업-> 파란원(BGR순이라 그럼)
        cv2.circle(img,(x,y),100,(255,0,0),-1) 
#같은 이미지를 출력하더라도 여러 이벤트를 확인할 수 있음
cv2.namedWindow(winname='my_draw')  
cv2.setMouseCallback('my_draw',draw_circle)
###
#오픈씨비로 실제이미지 보여주기
img = np.zeros((512,512,3),np.int8) 

while True:
    cv2.imshow('my_draw',img)
    
    if cv2.waitKey(20) & 0xFF == 27: 
        break
        
cv2.destroyAllWindows()

왼쪽을 클릭하면 초록색의 채워진원, 오른쪽을 클릭하면 파란색의 채워진원이 나온다.

출처: udemy x  kmooc opencv 및 딥러닝을 이용한 computer vision 파이썬