본문 바로가기

파이썬 python/파이썬 활용

[Open CV] Open CV로 빈 스케치북 만들고 도형 그리기 !

안녕하세요 ~ 

포스팅 하다 보니, 시간 가는 줄 모르겠네요 ... 

이별하고 힘들었는데, 유익하고 좋은 취미를 찾아서 다행이에요 ^.^

 

이번 포스팅에서는 Open CV로 도형을 그려보는 방법에 대해서 포스팅 해보겠습니다. 

 

1. 빈 스케치북 만들기 

: 도형을 그리려면, 우선 빈 스케치북 부터 만들어야겠죠?

import cv2

import numpy as np 

 

img = np.zeros((480, 640, 3), dtype = uint8) #만들고자 하는 크기 만큼의 numpy array만들기 (세로, 가로, 높이)를 튜플로

img[:] = (255, 255, 255)  #img[:] 모든 범위에 대해서 (255, 255, 255) bgr 흰색 

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

<- 요로코롬 흰 스케치북이 생깁니다. 

 

2. 일부 영역 색칠하기 

import cv2

import numpy as np 

img = np.zeros((500, 500, 3), dtype = np.uint8) 

img[100:200, 200:300] = (0, 0, 0)  # [세로: 가로] 로 색깔 지정 가능, bgr(0, 0, 0)이면 검은색 

cv2.imshow('img', img) 

cv2.waitKey(0)

cv2.destroyAllWindows()

 

3. 직선 그리기 

: 직선에는 3가지 종류_line type이 있음 

(1) cv2.LINE_4 : 상하좌우 4방항으로 연결된 선

(2) cv2.LINE_8 : 대각선을 포함한 8방향으로 연결된 선 - 기본 값 

(3) cv2.LINE_AA : 부드러운 선, anti-aliasing 

 

import cv2

import numpy as np 

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

COLOR = (0, 255, 255) #yellow 

THICKNESS = 3

 

#cv2.line(그림 위치, 시작점, 끝점, 선 색깔, 두께, 선종류)

cv2.line(img, (50, 100), (400, 50), COLOR, THICKNESS, cv2.LINE_8)

 

cv2.imshow('img', img) 

cv2.waitKey(0)

cv2.destroyAllWindows()

4. 원 그리기 

import cv2

import numpy as np 

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

COLOR = (0, 255, 255) #yellow 

RADIUS = 50 # RADIUS 반지름 지정해주기 

THICKNESS = 3

 

# cv2.line(그림 위치, 원의 중심, 반지름, 색깔, 두께, 선 종류) 

cv2.line(img, (200, 100), RADIUS, COLOR, THICKNESS, cv2.LINE_AA)

 

cv2.imshow('img', img) 

cv2.waitKey(0)

cv2.destroyAllWindows()

 

5. 사각형 그리기 

import cv2

import numpy as np 

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

COLOR = (0, 255, 0) #green 

THICKNESS = 3

 

#cv2.line(그림 위치,왼쪽 위, 오른쪽 위, 색깔, 두께) 

cv2.line(img, (50, 100), (400, 50), COLOR, THICKNESS)

 

#꽉차 있는 사각형 그리고 싶을때, THICKENSS대신 cv2.FILLED를 파라미터로 넘겨줌 

cv2.line(img, (50, 100), (400, 50), COLOR, cv2.FILLED)

 

cv2.imshow('img', img) 

cv2.waitKey(0)

cv2.destroyAllWindows()

 

6. 다각형 그리기 

import cv2

import numpy as np 

 

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

COLOR = (0, 0, 255)

THICKNESS = 3

 

#지나고자 하는 점들 = 좌표를 넘파이 array로 지정해줌, 이때 중요한건 [[]] 괄호 x 괄호라는 것 ! 

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

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

pts3 = np.array([[200, 100], [250, 150], [200, 200], [150, 150]])

 

# cv2.polylines(그릴 위치, [좌표], 닫힘 여부, 색깔, 두께, 선 종류

cv2.polylines(img, [pts1, pts2], True, COLOR, THICKNESS, cv2.LINE_AA)

 

# cv2.polylines(그릴 위치, [좌표], 닫힘 여부, 색깔, 두께, 선 종류 : 원하는 지점을 정의하고 리스트에 넣기

cv2.fillPoly(img, [pts1, pts2, pts3], COLOR, THICKENSS, cv2.LINE_AA) 

 

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()