도형 그리기

Goal

  • 다양한 모양의 도형을 그릴 수 있다.
  • cv2.line() , cv2.circle() , cv2.rectangle() , cv2.putText() 사용법을 알 수 있다.

도형그리기는 동영상이나 이미지에서 Match가 되는 영역을 찾은 후에 사용자가 인식하기 쉽게 표시하는 목적으로 사용됩니다.

Line 그리기

Start와 End 점을 연결하여 직선을 그립니다.

cv2.line(img, start, end, color, thickness)
Parameters:
  • img – 그림을 그릴 이미지 파일
  • start – 시작 좌표(ex; (0,0))
  • end – 종료 좌표(ex; (500. 500))
  • color – BGR형태의 Color(ex; (255, 0, 0) -> Blue)
  • thickness (int) – 선의 두께. pixel

Sample Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import numpy as np
import cv2

#모두 0으로 되어 있는 빈 Canvas(검정색)
img = np.zeros((512, 512, 3), np.uint8)
img = cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

사각형 그리기

top-left corner와 bottom-right corner점을 연결하는 사각형을 그립니다.

cv2.rectangle(img, start, end, color, thickness)
Parameters:
  • img – 그림을 그릴 이미지
  • start – 시작 좌표(ex; (0,0))
  • end – 종료 좌표(ex; (500. 500))
  • color – BGR형태의 Color(ex; (255, 0, 0) -> Blue)
  • thickness (int) – 선의 두께. pixel

Sample Code

img = cv2.rectangle(img, (384, 0), (510, 128), (0,255,0), 3)

원 그리기

cv2.circle(img, center, radian, color, thickness)
Parameters:
  • img – 그림을 그릴 이미지
  • center – 원의 중심 좌표(x, y)
  • radian – 반지름
  • color – BGR형태의 Color
  • thickness – 선의 두께, -1 이면 원 안쪽을 채움

Sample Code

img = cv2.circle(img, (447,63), 63, (0,0,255), -1)

타원 그리기

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) → img
Parameters:
  • img – image
  • center – 타원의 중심
  • axes – 중심에서 가장 큰 거리와 작은 거리
  • angle – 타원의 기울기 각
  • startAngle – 타원의 시작 각도
  • endAngle – 타원이 끝나는 각도
  • color – 타원의 색
  • thickness – 선 두께 -1이면 안쪽을 채움

Sample Code

img = cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)

Polygon 그리기

cv2.polylines(img, pts, isClosed, color, thickness)
Parameters:
  • img – image
  • pts (array) – 연결할 꼭지점 좌표
  • isClosed – 닫흰 도형 여부
  • color – Color
  • thickness – 선 두께

Sample Code

pts = np.array([[10,5], [20,30], [70,20], [50,10]], np.int32) # 각 꼭지점은 2차원 행렬로 선언
# 이미지에 표현하기 위해 3차원 행렬로 변환. 변환이전과 이후의 행렬 갯수는 동일해야함.
# -1은 원본에 해당하는 값을 그대로 유지.
pts = pts.reshape((-1, 1, 2))
img = cv2.polylines(img, [pts], True, (0,255,255))

이미지에 Text 추가

cv2.putText(img, text, org, font, fontSacle, color)
Parameters:
  • img – image
  • text – 표시할 문자열
  • org – 문자열이 표시될 위치. 문자열의 bottom-left corner점
  • font – font type. CV2.FONT_XXX
  • fontSacle – Font Size
  • color – fond color

Sample Code

cv2.putText(img, 'OpenCV', (10,500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255,255,255), 2)

지금까지 예제로 보여 주웠던 Sample Code를 실행시키면 아래와 같은 결과가 나옵니다.

../../_images/1.png