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()
직선의 종류
cv2.LINE_4
: 상하좌우 4 방향으로 연결된 선cv2.LINE_8
: 대각선을 포함한 8 방향으로 연결된 선 (기본값)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()