[Opencv] 도형

_찬·2022년 9월 18일
0

Opencv

목록 보기
3/6
post-thumbnail

빈 스케치북 만들기

도형을 그리기 전에 먼저 빈 스케치북을 만들 것이다.

import cv2
import numpy as np

# 세로 480 x 가로 640, 3 Channel (RGB) 에 해당하는 스케치북 만들기 
img = np.zeros((480,640,3), dtype=np.uint8)
# img = np.zeros((255,255,255), dtype=np.uint8) # 전체 공간을 흰 색으로 채우기 
# print('img',img)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

위와 같이 빈 스케치북을 만들고 나면 이제 스케치북에 그림을 그려야 한다.
먼저 간단하게 일부 영역만 건드려 보겠다.


img = np.zeros((480,640,3), dtype=np.uint8)
img[100:200, 200:300] = (255,255,255) 
# 세로 기준 100에서 200까지 가로 기준 200에서 300까지 흰색

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

이렇게 잘 뜨게 된다.


직선

직선은 총 3가지로 나뉜다.

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

차이점을 알아보기 위해 한 번에 그려보겠다.

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

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

cv2.line(img, (50,100), (400,50), COLOR, THICKNNESS, cv2.LINE_8) 
# 그릴 위치, 시작 점,    끝 점   , 색,     두께,     선 종류 
cv2.line(img, (50,130), (400,80), COLOR, THICKNNESS, cv2.LINE_4)
cv2.line(img, (50,160), (400,110), COLOR, THICKNNESS, cv2.LINE_AA) 

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


제일 마지막 부분의 선이 가장 부드럽고 나머지 두 점은 조금 계단 형식인 것을 볼 수 있다.


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

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

cv2.circle(img, (200,100), RADIUS, COLOR, THICKNNESS, cv2.LINE_AA)
# 그릴 위치, 원의 중심점, 반지름, 색깔, 두께, 선 종류 
cv2.circle(img, (400,100), RADIUS, COLOR, cv2.FILLED, cv2.LINE_AA)

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


왼쪽 원은 모든 곳이 채워져 있지 않고, 오른쪽 원은 모든 부분이 채워진 것을 확인 할 수 있다.
왼쪽은 cv2.FILLED을 추가해주지 않았고, 오른쪽은 cv2.FILLED 를 추가해준 차이가 있다.


사각형

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

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

cv2.rectangle(img, (100,100), (200,200), COLOR, THICKNNESS) # 속이 빈 사각형 
# 그릴 위치, 왼쪽 위 좌표, 오른쪽 아래 좌표, 색깔, 두께
cv2.rectangle(img, (300,100), (400,200), COLOR, cv2.FILLED)

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

이것 또한 cv.FILLED 를 추가해줌과 추가하지 않은 차이가 있다.


다각형

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]])
cv2.polylines(img, [pts1], True, COLOR, THICKNESS, cv2.LINE_AA)

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


이번에는 np.array numpy를 이용하여 pts1이라는 변수에 각각의 좌표를 찍어줌으로서 화면에 출력을 하였다.

profile
꾸준한 사람이 되길!

0개의 댓글