Attention please

[OpenCV] OpenCV로 도형 그리기(직선, 원, 사각형, 다각형) 본문

OpenCV

[OpenCV] OpenCV로 도형 그리기(직선, 원, 사각형, 다각형)

Seongmin.C 2023. 1. 9. 00:47

빈 도화지 그리기

도형을 그리기 전 도화지를 먼저 만들어 주어야 한다.

 

import cv2
import numpy as np

img = np.zeros((480, 640, 3), dtype = np.uint8) 

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

 

위와 같이 도화지를 만들었다면 도형을 그릴 준비는 끝이다.

 

 

 

 

 

 

 

 

직선 그리기

opencv로 그릴 수 있는 직선에는 총 3가지 종류가 있다.

 

  • cv2.LINE_4 : 상하좌우 4 방향으로 연결된 선
  • cv2.LINE_8 : 대각선을 포함한 8 방향으로 연결된 선 (기본값)
  • cv2.LINE_AA : 부드러운 선 (anti-aliasing)

또한 직선을 그리기 위해서는 선의 색과 두께를 지정해주어야 한다.

 

COLOR = (0, 255, 255) # BGR : Yellow
THICKNESS = 3  # 두께

 

직선을 그릴 때는 cv2.line() 함수를 사용하는데 차례대로 (도화지, 시작점, 끝점, 색, 두께, 선 타입) 이다.

 

cv2.line(img, (50, 100), (400, 50), COLOR, THICKNESS, cv2.LINE_8)
cv2.line(img, (50, 200), (400, 150), COLOR, THICKNESS, cv2.LINE_4)
cv2.line(img, (50, 300), (400, 250), COLOR, THICKNESS, cv2.LINE_AA)

 

 

 

 

 

 

 

 

 

원 그리기

원을 그리기 전 두께, 색 뿐만 아닌 반지름의 크기도 추가로 지정해주어야 한다.

 

COLOR = (255, 255, 0) # BGR : 옥색
RADIUS = 50  # 반지름
THICKNESS = 10  # 두께

 

원을 그릴 때는 cv2.circle() 함수를 사용하는데 차례대로 (도화지, 원의 중심, 반지름, 색, 두께, 선 타입) 이다.

 

추가로 원을 그릴 때 속이 빈 원과 속이 찬 원을 구분할 수 있다.

 

cv2.circle(img, (200, 100), RADIUS, COLOR, THICKNESS, cv2.LINE_AA)  # 속이 빈 원
cv2.circle(img, (400, 100), RADIUS, COLOR, cv2.FILLED, cv2.LINE_AA) # 속이 찬 원

 

 

 

 

 

 

 

 

 

사각형 그리기

사각형을 그리기 전 색과 두께를 먼저 지정해주어야 한다.

 

COLOR = (0, 255, 0)  # BGR : Green
THICKNESS = 3  # 두께

 

사각형을 그릴 때는 cv2.rectangle() 함수를 사용하는데 차례대로 (도화지, 왼쪽 위 좌표, 오른쪽 아래 좌표, 색, 두께) 이다. 또한 사각형 역시 속이 빈 사각형과 속이 찬 사각형으로 구분하여 그릴 수 있다.

 

cv2.rectangle(img, (100,100), (200,200), COLOR, THICKNESS)  # 속이 빈 사각형
cv2.rectangle(img, (300,100), (400,300), COLOR, cv2.FILLED) # 속이 찬 사각형

 

 

 

 

 

 

 

 

 

다각형 그리기

직접 좌표를 지정하여 도형을 그릴 수 있다. 보통 마우스를 클릭한 좌표 등을 가져와 도형을 그리는 등의 작업을 할 때 자주 사용된다. 

 

먼저 색과 두께를 지정한다.

 

COLOR = (0, 0, 255)  # BGR : Red
THICKNESS = 3  # 두께

 

이번에는 직접 좌표를 지정했다.

 

pts1 = np.array([[100, 100], [200, 100], [100, 200]])
pts2 = np.array([[200, 100], [300, 100], [300, 200]])

 

각 리스트안의 좌표는 다각형의 꼭짓점을 의미하며 총 3개의 점이 있으므로 삼각형이 만들어진다. 위 좌표를 통해 그림을 그리는데 다각형 역시 속이 빈 다각형과 속이 찬 다각형으로 구분하여 그릴 수 있다.

 

다각형을 그릴 때는 cv2.polylines() 함수를 사용하는데 차례대로 (도화지, 다각형의 좌표, 닫힌 or 열린 도형 여부, 색, 두께, type) 이다.

 

cv2.polylines(img, [pts1, pts2], True, COLOR, THICKNESS, cv2.LINE_AA) # 속이 빈 다각형

pts3 = np.array([[[100,300], [200,300], [100,400]], [[200,300], [300,300], [300,400]]])
cv2.polylines(img, pts3, True, COLOR, cv2.LINE_AA)            # 속이 찬 다각형

 

 

Comments