예제 영상 파일

choco.jpg

예제 파일은 아무 이미지 파일로 사용하셔도 됩니다. 저는 귀여운 강아지 초코로 진행해볼 예정입니다.

파일을 다운받으셔서 같은 환경(실행하는 파이썬 디렉터리)에 저장을 시켜 둡니다.

(만약 다른 곳에 있다면 경로를 아셔야 합니다)

 

이미지 그리기 함수

이미지를 다루게 되면, 수정을 하는 경우가 발생하는데요, 원본 이미지랑 분리를 시키기 위해서 copy함수를 사용합니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()

다음과 같이 사용을하면, copy_img를 생성할 수 있습니다.

 

copy 된 이미지에서 원하는 부분만 잘라보도록 하겠습니다. 이때 우리는, 일부 이미지를 자르기 위해서 파이썬 기본 문법인 리스트 슬라이싱을 사용합니다. 이미지에서 세로 부분과 가로 부분의 범위를 주어서 이미지를 잘라 낼 수 있습니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.imshow('image2', img2)
cv2.waitKey()

우리는 이렇게, 지정된 범위를 잘라내서, 초코만을 뽑아 낼 수 있었습니다. copy함수를 사용하였기 때문에, 원본(img)은 보존되고, 새로운 img를 얻어낼 수 있습니다.

- line

line 함수는 이미지에, 선을 넣는(그리는) 함수 입니다.

사용법은 cv2.line(원본 이미지, 시작점(x, y) 좌표 끝점(x, y) 좌표, (B, G, R), 두께, 선형 굵기)입니다.

다음 예제는, 제가 정한 사각형에, BGR 중 GREEN 컬러로 두께가 2인 사각형을 그리는 예제입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.line(img2, (120,135), (150,160), (0,255,0), 2)
cv2.imshow('image2', img2)
cv2.waitKey()

-rectangle

circle 함수는 이미지에, 사각형을 넣는(그리는) 함수입니다. line함수와 비슷한데, line의 대각선을 갖도록 하는 사각형을 그려주는 함수 입니다.

사용법은 cv2.rectangle(원본 이미지, 시작점(x, y) 종료점(x, y), (B, G, R), 두께, 선형 굵기)입니다.

다음 예제는, 제가 정한 사각형에, BGR 중 GREEN 컬러로 두께가 2인 사각형을 그리는 예제입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.rectangle(img2, (120,135), (150,160), (0,255,0), 2)
cv2.imshow('image2', img2)
cv2.waitKey()

-circle

circle 함수는 이미지에, 원을 넣는(그리는) 함수입니다.

사용법은 cv2.circle(원본 이미지, 좌표 (x, y), 반지름, (B, G, R), 두께, 선형 굵기)입니다.

 

다음 예제는, 제가 정한 x, y 좌표에 반지름이 20이고, BGR 중 RED 컬러로 두께가 2인 원을 두 개 그리는 예제입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.circle(img2, (115,120), 20, (0,0,255), 2)
cv2.circle(img2, (175,120), 20, (0,0,255), 2)
cv2.imshow('image2', img3)
cv2.waitKey()

-ellipse

ellipse함수는 호를 그려주는 함수입니다.

사용법은 cv2.ellipse(원본 이미지, 중심점(x, y), (lr, sr), 각도, 시작 각도, 종료 각도, (B, G, R), 두께, 선형 굵기)

lr은 가장 먼 거리를 지나는 점이고, sr은 가장 가까운 거리를 가지는 지점입니다.

 

다음 예제는, 제가 정한 x, y 좌표에 45도에서 가까운 (30~50) 정도 떨어져 있고 45도~135도 사이에 있는 호를,

BGR 중 RED 컬러로 두께가 2인 원을 두 개 그리는 예제입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.ellipse(img2, (140, 120), (30, 50), 0, 45, 135, (0, 0, 255), 2)
cv2.imshow('image2', img2)
cv2.waitKey()

-polylines, fillPoly

poly함수는 다각형을 그려주는 함수입니다. polylines는 다각형 외곽만 표시해주는 함수이고, fillPoly는 색상이 채워진 다각형을 그려주는 함수입니다.

poly 함수를 사용하는 경우, numpy로 지정한 위치 좌표를 설정해주셔야 합니다.

 

함수 사용법은

cv2.polylines(원본 이미지, [numpy로 설정한 위치 좌표], 닫힘 유/무, (B, G, R), 두께, 선형 굵기)

cv2.fillPoly(원본 이미지, [numpy로 설정한 위치 좌표], (B, G, R), 두께, 선형 굵기)

입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
import numpy as np
polly1_np = np.array([[90, 100], [200, 100], [145, 180]])
polly2_np = np.array([[90, 250], [200, 250], [145, 180]])
cv2.polylines(img2, [polly1_np], True, (0, 255, 255), 2)
cv2.fillPoly(img2, [polly2_np], (255, 0, 255), cv2.LINE_AA)
cv2.imshow('image2', img2)
cv2.waitKey()

-putText

putText함수는 이미지에 글자를 넣어주는 함수입니다.

함수 사용법은 cv2.putText(원본 이미지, 원하는 글자, 글자 위치 (x, y), 글꼴, 글자 크기, (B, G, R), 글자 굵기)

입니다.

img = cv2.imread('choco.jpg')
copy_img = img.copy()
img2 = copy_img[20:500, 300:600]
cv2.putText(img2, "CHOCO", (90, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2)
cv2.imshow('image2', img2)
cv2.waitKey()

Tip. 선형 굵기 대신, 선형 타입을 넣어도 됩니다.

선형 종류에는 (cv2.FILLED(내부 채움), cv2.LINE_4(4점 연결), cv2.LINE_8(8점 연결), cv2.LINE_AA(AntiAlias)) 가 있습니다.

 

또한, 사용할 수 있는 글자 종류에는

 

cv2.FONT_HERSHEY_SIMPLEX
cv2.FONT_HERSHEY_PLAIN
cv2.FONT_HERSHEY_DUPLEX
cv2.FONT_HERSHEY_COMPLEX
cv2.FONT_HERSHEY_TRIPLEX
cv2.FONT_HERSHEY_COMPLEX_SMALL
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
cv2.FONT_HERSHEY_SCRIPT_COMPLEX
cv2.FONT_ITALIC

 

순서대로, 표현해두었습니다. 확인하고 마음에 드는 글꼴을 선택하시면 됩니다.

 

반응형

+ Recent posts