Python OpenCV 강좌 : 제 18강 - Drawing

   

그래픽 드로잉 (Drawing)


1 영상이나 이미지 위에 그래픽을 그리기 위해 사용합니다. , , 사각형 등을 그릴 수 있습니다.



Main Code


import numpy as np
import cv2

src = np.zeros((768, 1366, 3), dtype = np.uint8)

cv2.line(src, (100, 100), (1200, 100), (0, 0, 255), 3, cv2.LINE_AA)
cv2.circle(src, (300, 300), 50, (0, 255, 0), cv2.FILLED, cv2.LINE_4)
cv2.rectangle(src, (500, 200), (1000, 400), (255, 0, 0), 5, cv2.LINE_8)
cv2.ellipse(src, (1200, 300), (100, 50), 0, 90, 180, (255, 255, 0), 2)

pts1 = np.array([[100, 500], [300, 500], [200, 600]])
pts2 = np.array([[600, 500], [800, 500], [700, 600]])
cv2.polylines(src, [pts1], True, (0, 255, 255), 2)
cv2.fillPoly(src, [pts2], (255, 0, 255), cv2.LINE_AA)

cv2.putText(src, "YUNDAEHEE", (900, 600), cv2.FONT_HERSHEY_COMPLEX, 2, (255, 255, 255), 3)

cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()



Detailed Code


cv2.line(src, (100, 100), (1200, 100), (0, 0, 255), 3, cv2.LINE_AA)

cv2.line(이미지, (x1, y1), (x2, y2), (B, G, R), 두께, 선형 타입)을 이용하여 을 그릴 수 있습니다.

(x1, y1)(x2, y2)가 연결된 (B, G, R) 색상, 두께 굵기의 선을 그릴 수 있습니다.

선형 타입은 선의 연결성을 의미합니다.



cv2.circle(src, (300, 300), 50, (0, 255, 0), cv2.FILLED, cv2.LINE_4)

cv2.circle(이미지, (x, y), 반지름, (B, G, R), 두께, 선형 타입)을 이용하여 을 그릴 수 있습니다.

(x, y) 중심점을 가지는 반지름 크기로 설정된 (B, G, R) 색상, 두께 굵기의 원을 그릴 수 있습니다.


  • Tip : 내부를 채우는 경우, 두께를 cv2.FILLED을 사용하여 내부를 채울 수 있습니다.



cv2.rectangle(src, (500, 200), (1000, 400), (255, 0, 0), 5, cv2.LINE_8)

cv2.rectangle(이미지, (x1, y1), (x2, y2), (B, G, R), 두께, 선형 타입)을 이용하여 사각형을 그릴 수 있습니다.

(x1, y1)의 좌측 상단 모서리와 (x2, y2)의 우측 하단 모서리가 연결된 (B, G, R) 색상, 두께 굵기의 사각형을 그릴 수 있습니다.



cv2.ellipse(src, (1200, 300), (100, 50), 0, 90, 180, (255, 255, 0), 2)

cv2.ellipse(이미지, (x, y), (lr, sr), 각도, 시작 각도, 종료 각도, (B, G, R), 두께, 선형 타입)을 이용하여 타원을 그릴 수 있습니다.

(x, y)의 중심점을 가지며 중심에서 가장 먼 거리를 가지는 lr과 가장 가까운 거리를 가지는 sr의 타원을 각도만큼 기울어진 타원를 생성합니다.

시작 각도종료 각도를 설정하여 의 형태로 그리며 (B, G, R) 색상, 두께 굵기의 타원을 그릴 수 있습니다.


  • Tip : 선형 타입은 설정하지 않아도 사용할 수 있습니다.



pts1 = np.array([[100, 500], [300, 500], [200, 600]])
pts2 = np.array([[600, 500], [800, 500], [700, 600]])

poly 함수를 사용하는 경우, numpy 형태로 저장된 위치 좌표들이 필요합니다.

n개의 점이 저장된 경우, n각형을 그릴 수 있습니다.



cv2.polylines(src, [pts1], True, (0, 255, 255), 2)

cv2.polylines(이미지, [위치 좌표], 닫힘 유/무, (B, G, R), 두께, 선형 타입 )을 이용하여 다각형을 그릴 수 있습니다.

[위치 좌표]들의 지점들을 가지며 시작점도착점이 연결되어있는지 닫힘 유/무를 설정하여 (B, G, R) 색상, 두께 굵기의 다각형을 그릴 수 있습니다.



cv2.fillPoly(src, [pts2], (255, 0, 255), cv2.LINE_AA)

cv2.fillPoly(이미지, [위치 좌표], (B, G, R), 두께, 선형 타입 )을 이용하여 내부가 채워진 다각형을 그릴 수 있습니다.

[위치 좌표]들의 지점들을 가지며 (B, G, R) 색상, 두께 굵기의 내부가 채워진 다각형을 그릴 수 있습니다.



cv2.putText(src, "YUNDAEHEE", (900, 600), cv2.FONT_HERSHEY_COMPLEX, 2, (255, 255, 255), 3)

cv2.putText(이미지, 문자, (x, y), 글꼴, 글자 크기, (B, G, R), 두께, 선형 타입)을 이용하여 문자를 그릴 수 있습니다.

문자 내용을 가지는 문자열을 (x, y) 위치에 표시합니다. 글꼴글자 크기를 가지며 (B, G, R) 색상, 두께 굵기의 문자를 그릴 수 있습니다.


  • Tip : 문자의 위치는 좌표의 좌측 하단을 기준으로 글자가 생성됩니다.



Additional Information


선형 타입 종류

속성의미
cv2.FILLED내부 채우기
cv2.LINE_44점 이웃 연결
cv2.LINE_88점 이웃 연결
cv2.LINE_AAAntiAlias


글꼴 종류

속성의미비고
cv2.FONT_HERSHEY_SIMPLEX보통 크기의 산세리프 글꼴-
cv2.FONT_HERSHEY_PLAIN작은 크기의 산세리프 글꼴-
cv2.FONT_HERSHEY_DUPLEX보통 크기의 산세리프 글꼴정교함
cv2.FONT_HERSHEY_COMPLEX보통 크기의 세리프 글꼴-
cv2.FONT_HERSHEY_TRIPLEX보통 크기의 세리프 글꼴정교함
cv2.FONT_HERSHEY_COMPLEX_SMALL작은 크기의 손글씨 글꼴-
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX보통 크기의 손글씨 글꼴-
cv2.FONT_HERSHEY_SCRIPT_COMPLEX보통 크기의 손글씨 글꼴정교함
cv2.FONT_ITALIC기울임 꼴-


추가 옵션

shift : 좌표를 Shift(비트 연산)만큼 이동시켜 표시합니다.

offset : 좌표를 (x, y)만큼 이동시켜 표시합니다.



Result


2



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post Python OpenCV 강좌 : 제 19강 - 기하학적 변환 ⤧  Previous post Python OpenCV 강좌 : 제 17강 - 채널 분리 & 병합