도형 그리기
- 도형 그리기는 동영상이나 사진에서 어떠한 특정 위치를 표시하고자 할때 사용된다.
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에서 사용하는 글꼴 종류
- cv2.FONT_HERSHEY_SIMPLEX : 보통 크기의 산 세리프 글꼴
- cv2.FONT_HERSHEY_PLAIN : 작은 크기의 산 세리프 글꼴
- cv2.FONT_HERSHEY_SCRIPT_SIMPLEX : 필기체 스타일 글꼴
- cv2.FONT_HERSHEY_TRIPLEX : 보통 크기의 세리프 글꼴
- 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()
'CV' 카테고리의 다른 글
이미지의 기하학적 변환(Geometric Transformations of images) (0) | 2022.10.23 |
---|---|
OpenCV 기본 연산 (0) | 2022.10.22 |
연결 요소 (0) | 2022.10.22 |
이진화, 오츠 알고리즘(Binarization, Thresholding, Otsu Algorithm) (0) | 2022.10.22 |
히스토그램 평활화, 역투영(Equalized, Back-Projection) (0) | 2022.10.22 |