Home [CV] 도형 그리기
Post
Cancel

[CV] 도형 그리기

1
2
import cv2
import numpy as np

빈 스케치북 만들기

1
2
3
4
5
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

# 전체 공간을 흰색으로 채우기
img[:] = (255, 255, 255)
  • BGR
  • (0, 0, 0) : Black
  • (255, 255, 255) : White
  • (255, 0, 0) : Blue
  • (0, 0, 255) : Red
  • (0, 255, 255) : Yellow
  • (0, 255, 0) : Green
1
2
3
4
5
6
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

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

일부 영역 색칠

1
2
3
4
5
6
7
8
9
10
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

# img[height, width]
# 정의한 이미지 공간만큼 흰 색으로 채움
img[100:200, 200:300] = (255, 255, 255)

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

직선의 종류

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

cv2.line() 함수를 통해 직선을 그린다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

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

# (직선을 그릴 곳, 시작 점, 끝 점, 색상, 두께, 선 종류)
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)

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

  • RADIUS : 반지름
  • cv2.circle() : 원 그리는 함수
  • cv2.FILLED : 원 안을 채우는 옵션 (-1 이라고 해도 된다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

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

# (그릴 곳, (원 중심 점), 반지름, 색상, 두께, 선 타입)
cv2.circle(img, (200, 100), RADIUS, COLOR, THICKNESS, cv2.LINE_AA) # 속이 빈 원
cv2.circle(img, (400, 100), RADIUS, COLOR, cv2.FILLED, cv2.LINE_AA) # 속이 채워진 원

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

사각형

1
2
3
4
5
6
7
8
9
10
11
12
13
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

COLOR = (0, 255, 0) # BGR 초록색
THICKNESS = 3 # 두께

# (그릴 곳, (왼쪽 위 좌표), (오른쪽 아래 좌표), 색상, 두께, 선 타입)
cv2.rectangle(img, (100, 100), (200, 200), COLOR, THICKNESS) # 속이 빈 사각형
cv2.rectangle(img, (300, 100), (400, 300), COLOR, cv2.FILLED) # 속이 채워진 사각형

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

다각형

  • 좌표를 각각 정의해주어야 한다.
  • cv2.polylines()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

COLOR = (0, 0, 255) # BGR 빨간색
THICKNESS = 3 # 두께

# 각각 세 개의 지점
pts1 = np.array([[100, 100], [200, 100], [100, 200]])

# (그릴 곳, 좌표, 닫힘(True) or 열림(False), 색상, 두께, 선 타입)
cv2.polylines(img, [pts1], True, COLOR, THICKNESS, cv2.LINE_AA)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

COLOR = (0, 0, 255) # BGR 빨간색
THICKNESS = 3 # 두께

# 각각 세 개의 지점
pts1 = np.array([[100, 100], [200, 100], [100, 200]])
pts2 = np.array([[200, 100], [300, 100], [300, 200]])

# (그릴 곳, 좌표, 닫힘(True) or 열림(False), 색상, 두께, 선 타입)
cv2.polylines(img, [pts1, pts2], True, COLOR, THICKNESS, cv2.LINE_AA)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 세로 480 x 가로 640, 3 channel [RGB]에 대당하는 스케치북 만들기
img = np.zeros([480, 640, 3], dtype=np.uint8)

COLOR = (0, 0, 255) # BGR 빨간색
THICKNESS = 3 # 두께

# 각각 세 개의 지점
pts1 = np.array([[100, 100], [200, 100], [100, 200]])
pts2 = np.array([[200, 100], [300, 100], [300, 200]])

# (그릴 곳, 좌표, 닫힘(True) or 열림(False), 색상, 두께, 선 타입)
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.fillPoly(img, pts3, COLOR, cv2.LINE_AA)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
This post is licensed under CC BY 4.0 by the author.