juuuding

[Computer Vision & Deep Learning] OpenCV - 페인팅 기능 만들기 본문

인공지능/cs231n

[Computer Vision & Deep Learning] OpenCV - 페인팅 기능 만들기

jiuuu 2023. 10. 31. 01:27

 마우스가 이동한 궤적을 따라 페인팅하는 기능을 구현해보겠다.

 

[붓 형태로 페인팅하기]

 아래의 코드에서는 왼쪽 버튼을 클릭하면 파란색, 오른쪽 버튼을 클릭하면 빨간색으로 페인팅하는 결과가 나온다. 여기서 페인팅을 하는 원리는 연속적으로 원을 그리고 그 원의 내부를 채워 선처럼 보이게 하는 것이다. 따라서 cv.circle() 함수를 사용한다. 이 함수의 인수 값에는 영상, 원의 중심, 반지름, 색, 두께를 차례대로 입력한다. 두께에 -1을 입력하게 되면 원의 내부가 채워진다.  

 

[Code]

import cv2 as cv
import sys

img=cv.imread("resource/son.jpg")

if img is None:
    sys.exit("파일을 찾을 수 없습니다.")

Brushsiz=5
LColor, RColor = (255,0,0),(0,0,255)

def painting(event, x,y,flags,param):
    if event == cv.EVENT_LBUTTONDOWN:   # 좌클릭 시
        cv.circle(img,(x,y),Brushsiz,LColor,-1)
    elif event == cv.EVENT_RBUTTONDOWN: # 우클릭 시
        cv.circle(img,(x,y),Brushsiz,RColor,-1)
    elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:    #좌 클릭한 상태로 이동시
        cv.circle(img,(x,y),Brushsiz,LColor,-1)
    elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_RBUTTON:    #우 클릭한 상태로 이동시
        cv.circle(img,(x,y),Brushsiz,RColor,-1)

    # 수정된 영상을 윈도우에 다시 디스플레이
    cv.imshow("Painting",img)


cv.namedWindow("Painting")
cv.imshow("Painting",img)

cv.setMouseCallback("Painting", painting)

# 아래의 무한루프가 없다면 콜백 함수 등록 후 프로그램이 종료됨
while(True):
    if cv.waitKey(1)==ord('q'):
        cv.destroyAllWindows
        break