In [1]:
from Custom.mediahelper import show_image_with_pil # 개발자 정의 모듈
3. 도형 그리기¶
In [2]:
import cv2
import numpy as np
# 세로 480 x 가로 640, 3 Channel (RGB) 에 해당하는 스케치북 만들기
img = np.zeros((480,640,3), dtype = np.uint8)
# OpenCV 에서는 RGB 아니고 BGR임
#img[:] = (255,255,255) # 전체 공간을 흰색으로 채우기
img
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
'img'
일부 영역 색칠¶
In [3]:
import cv2
import numpy as np
img = np.zeros((480,640,3), dtype = np.uint8)
img[0:200, 200:600] = (255,255,255)
# 세로 # 가로
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
'img'
배열 확인¶
In [4]:
print(np.zeros(5)) # 1행 5열
print("-" * 20)
print(np.zeros((2,5))) # 2행 5열
print("-" * 20)
print(np.zeros((2,5,4))) # (5행 4열) * 2
print("-" * 20)
shape = np.zeros((4,6,3))
shape[0:2,4:6] = (255,255,255)
print(shape)
[0. 0. 0. 0. 0.] -------------------- [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] -------------------- [[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]] -------------------- [[[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [255. 255. 255.] [255. 255. 255.]] [[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [255. 255. 255.] [255. 255. 255.]] [[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.]] [[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.]]]
직선¶
직선의 종류 (line type)
- cv2.LINE_4 : 상하좌우 4 방향으로 연결된 선
- cv2.LINE_8 : 대각선을 포함한 8 방향으로 연결된 선 (기본값)
- cv2.LINE__AA : 부드러운 선(anti-aliasing)
In [5]:
import cv2
import numpy as np
img = np.zeros((480,640,3), dtype = np.uint8)
COLOR = (0, 255, 255) # BGR
THIKNESS = 3 # 두께
cv2.line(img , (50, 100), (480, 50), COLOR, THIKNESS, cv2.LINE_8) # 시작점 좌표(50,100) 끝점 좌표(480, 50)
cv2.line(img , (50, 200), (480, 150), COLOR, THIKNESS, cv2.LINE_4)
cv2.line(img , (50, 300), (480, 250), COLOR, THIKNESS, cv2.LINE_AA)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
'img'
원¶
In [6]:
import cv2
import numpy as np
img = np.zeros((480,640,3), dtype = np.uint8)
COLOR = (255, 255, 0) # BGR
RADIUS = 50 # 반지름
THIKNESS = 3 # 두께
cv2.circle(img, (200, 100), RADIUS, COLOR, THIKNESS, cv2.LINE_8) # 속이 빈 원
cv2.circle(img, (250, 150), RADIUS, COLOR, cv2.FILLED, cv2.LINE_8) # 속이 꽉찬 원
#cv2.circle(img, (250, 150), RADIUS, COLOR, -1, cv2.LINE_8) # 속이 꽉찬 원
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
'img'
사각형¶
In [7]:
import cv2
import numpy as np
img = np.zeros((480,640,3), dtype = np.uint8)
COLOR = (0, 255, 0) # BGR
THIKNESS = 3 # 두께
cv2.rectangle(img, (100, 100), (150,200), COLOR, THIKNESS, cv2.LINE_8) # 시작점 좌표(100,100) 대각 끝점 좌표(150, 200)
cv2.rectangle(img, (250, 250), (350,300), COLOR, cv2.FILLED, cv2.LINE_8)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
'img'
다각형¶
In [8]:
import cv2
import numpy as np
img = np.zeros((480,640,3), dtype = np.uint8)
COLOR = (0, 0, 255) # BGR
THIKNESS = 3 # 두께
pts1 = np.array([[100,100],[200,100],[100,200]]) # 세개 꼭짓점 좌표
pts2 = np.array([[100,100],[200,100],[100,200]]) + 100
print(pts2)
#cv2.polylines(img, [pts1,pts2], False, COLOR, THIKNESS, cv2.LINE_AA) # 다각형
#cv2.polylines(img, [pts1,pts2], True, COLOR, THIKNESS, cv2.LINE_AA) # 닫힌 다각형
cv2.fillPoly(img, [pts1,pts2], COLOR, cv2.LINE_AA) # 꽉찬 다각형
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
show_image_with_pil(img, 'img')
[[200 200] [300 200] [200 300]] 'img'
'Python > OpenCV' 카테고리의 다른 글
07. 이미지 자르기 (0) | 2024.11.18 |
---|---|
05. 파일 저장 (0) | 2024.11.18 |
04. 텍스트 (0) | 2024.11.18 |
02. 동영상 출력 (0) | 2024.11.18 |
01. 이미지 생성 (0) | 2024.11.18 |