본문 바로가기

CV

도형 그리기(직선, 사각형, 원, 타원, 다각형, 텍스트)

도형 그리기

- 도형 그리기는 동영상이나 사진에서 어떠한 특정 위치를 표시하고자 할때 사용된다.

 

1. 빈 스케치북 만들기

import cv2
import numpy as np

#세로 480 x 가로 640, 3Channel (RGB) 에 해당하는 스케치북 만들기
img = np.zeros((480,640,3), dtype=np.uint8)
img[:] = (255,255,255) #전체 공간을 흰색으로 채우기
cv2.imshow('img',img)
cv2.waitKey(5000) # 지정된 시간 동안 사용자 키 입력 대기
cv2.destroyAllWindows()

 

2.직선 그리기

import numpy as np
import cv2

img = np.zeros((512,512,3),np.uint8)
img = cv2.line(img, (0,0),(511,511),(255,0,255),5)

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

 

3. 사각형 그리기

-rectangle(사각형을 그릴 위치, 왼쪽 위 좌표, 오른쪽 아래 좌표, 선 색, 두께)

import numpy as np
import cv2

img = np.zeros((512,512,3),np.uint8)
img = cv2.rectangle(img, (100,100),(400,400),(255,0,255),5)

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

 

4.다격형 그리기

-polylines(다각형을 그릴 위치, [점들의 위치],모든 점들을 연결할 것인지에 대한 여부, 두꼐, 선종류)

import cv2
import numpy as np

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

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

#2차원 배열속 [] 하나가 점 하나가 됨.
pts1 = np.array([[100,100], [200,100], [100,200]])
pts2 = np.array([[200,200], [300,200], [200,300]])

#polylines(다각형을 그릴 위치, [점들의 위치],모든 점들을 연결할 것인지에 대한 여부, 두꼐, 선종류)
cv2.polylines(img,[pts1], True, COLOR, THICKNESS, cv2.LINE_AA)
cv2.polylines(img,[pts2], False, COLOR, THICKNESS, cv2.LINE_AA)

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

-polylines의 True,False 옵션의 차이

 

polylines안에 있는 [ ] 옵션활용

여러개의 도형을 그리고 싶을때 하나의 도형에 새로운 함수를 호출하는 것이 아니라, 리스트 안에 모든 점들에 대한 정보를 넣어주면 됨

import cv2
import numpy as np

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

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

#2차원 배열속 [] 하나가 점 하나가 됨.
pts1 = np.array([[100,100], [200,100], [100,200]])
pts2 = np.array([[200,200], [300,200], [200,300]])

#polylines(다각형을 그릴 위치, [점들의 위치],모든 점들을 연결할 것인지에 대한 여부, 두꼐, 선종류)
cv2.polylines(img,[pts1,pts2], True, COLOR, THICKNESS, cv2.LINE_AA)

#곽찬 다각형 출력
cv2.fillPoly(img,[pts1,pts2],COLOR, cv2.LINE_AA)

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

 

5. 원 그리기

circle(원을 그릴 위치, 원의 중심점, 반지름,선 색, 두께, 선 종류)

원을 그리고 싶을때는 원의 지름을 미리 지정해 주어야 함.

import cv2
import numpy as np

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

COLOR = (255,255,0) # BGR순서임 : Yellow
RADIUS = 50 #반지름
THICKNESS = 3 # 두께

#circle(원을 그릴 위치, 원의 중심점, 반지름,선 색, 두께, 선 종류)
cv2.circle(img,(200,100), RADIUS,COLOR,THICKNESS, cv2.LINE_AA) #속이 빈 원 생성
cv2.circle(img,(400,100), RADIUS,COLOR,cv2.FILLED, cv2.LINE_AA) #속이 꽉 찬 원 생성(THICKNESS 옵션에 cv2.FILLED 로 지정해주면 됨.)



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

 

6. 타원 그리기

circle(원을 그릴 위치, 원의 중심점, 중심에서 가장 큰 거리와 가장 작은 거리, 타원의 기울기 각, 타원의 시작 각도, 타원이 끝나는 각도, 선 색, 두께) 

두께를 -1로 지정해 줄 경우 안을 채운다.

 

import numpy as np
import cv2

img = np.zeros((512,512,3),np.uint8)
img = cv2.ellipse(img, (250,250),(100,200),0,0,360,(255,0,255),5,cv2.LINE_AA)

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

 

7. 텍스트 그리기

OpenCV에서 사용하는 글꼴 종류

  1. cv2.FONT_HERSHEY_SIMPLEX : 보통 크기의 산 세리프 글꼴
  2. cv2.FONT_HERSHEY_PLAIN : 작은 크기의 산 세리프 글꼴
  3. cv2.FONT_HERSHEY_SCRIPT_SIMPLEX : 필기체 스타일 글꼴
  4. cv2.FONT_HERSHEY_TRIPLEX : 보통 크기의 세리프 글꼴
  5. cv2.FONT_ITALIC : 기울임(이탤릭체)


    putText(글을 그릴 위치,텍스트 내용, 시작 위치 ,폰트 종류, 크기, 색 ,두께)

 

 

import numpy as np
import cv2

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

COLOR = (255,255,255) #흰색
THICKNESS = 1
SCALE = 1

#putText(글을 그릴 위치,텍스트 내용, 시작 위치 ,폰트 종류, 크기, 색 ,두께)
cv2.putText(img,"Nado Simplex",(20,50),cv2.FONT_HERSHEY_SIMPLEX,SCALE,COLOR,THICKNESS)
cv2.putText(img,"Nado Simplex",(20,150),cv2.FONT_HERSHEY_PLAIN,SCALE,COLOR,THICKNESS)
cv2.putText(img,"Nado Simplex",(20,250),cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,SCALE,COLOR,THICKNESS)
cv2.putText(img,"Nado Simplex",(20,350),cv2.FONT_HERSHEY_TRIPLEX,SCALE,COLOR,THICKNESS)
cv2.putText(img,"Nado Simplex",(20,450),cv2.FONT_HERSHEY_SIMPLEX|cv2.FONT_ITALIC,SCALE,COLOR,THICKNESS)



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