juuuding
[Computer Vision & Deep Learning] OpenCV - 페인팅 기능 만들기 본문
마우스가 이동한 궤적을 따라 페인팅하는 기능을 구현해보겠다.
[붓 형태로 페인팅하기]
아래의 코드에서는 왼쪽 버튼을 클릭하면 파란색, 오른쪽 버튼을 클릭하면 빨간색으로 페인팅하는 결과가 나온다. 여기서 페인팅을 하는 원리는 연속적으로 원을 그리고 그 원의 내부를 채워 선처럼 보이게 하는 것이다. 따라서 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
'인공지능 > cs231n' 카테고리의 다른 글
[Computer Vision & Deep Learning] Image Processing - 이진 영상 (0) | 2023.11.07 |
---|---|
[Computer Vision & Deep Learning] Image Processing - 디지털 영상 기초 (1) | 2023.11.01 |
[Computer Vision & Deep Learning] OpenCV - 그래픽 기능과 사용자 인터페이스 만들기 (0) | 2023.10.31 |
[Computer Vision & Deep Learning] OpenCV - 웹 캠에서 비디오 읽기 (0) | 2023.10.30 |
[Computer Vision & Deep Learning] OpenCV - 영상 형태 변환하고 크기 축소하기 (0) | 2023.10.30 |