프로그래밍 언어 및 IT 정보/opencv_python

[opencv_python] 2. 도형 및 TEXT 그리기

Himer_torr 2022. 7. 7. 16:35
반응형

저번 포스팅에 이어 opencv로 도형을 그리는 예제를 공부해보도록 하겠습니다.

저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다.

 

opencv의 다양한 api 함수를 통하여 여러 도형을 그릴 수 있습니다.

도형 그리는 법은 이미지나 동영상에서 자기가 원하는 영역을 찾은 후 사용자가

편하게 인식하기 위해 목적으로도 사용됩니다 :)

 

빈 이미지 제작

먼저 어떠한 배경에 도형이나 그림을 그리기 전에 500x500 픽셀 크기의 하얀 이미지를 

제작해보려 합니다.

 

import cv2
import numpy as np

img = np.full((500,500,3), 255, dtype=np.uint8)
cv2.imwrite('blank_500.jpg', img)

위 코드를 보시면 Numpy 라이브러리를 사용하게 됩니다.

Numpy는 백터 및 행렬 연산에 있어서 매우 편리한 기능을 제공합니다.

아래는 Numpy를 자세히 알아보고 싶으면 아래 홈페이지에서 좀 더 자세하게 보실  수 있습니다.

https://numpy.org/

 

NumPy

Powerful N-dimensional arrays Fast and versatile, the NumPy vectorization, indexing, and broadcasting concepts are the de-facto standards of array computing today. Numerical computing tools NumPy offers comprehensive mathematical functions, random number g

numpy.org

다시 위 코드를 보면 500 x 500 픽셀에 255의 색을 담아 만들고

cv2.imwrite()의 함수로 이미지 파일로 저장합니다.

제작한 blank_500.jpg 이미지

Line 그리기

Start와 end점을 이어서 직선을 그립니다.

cv2.line(img, start, end, color, thickness)

Parameters

  • img: 그림을 그릴 이미지 파일
  • start: 시작 좌표 (ex : (0,0))
  • end: 종료 좌표 (ex: (500,500))
  • color: BGR형태의 Color(ex: (0,255,0) ->Green)
  • thickness: 선의 두께
import cv2

img = cv2.imread('./blank_500.jpg')
img = cv2.line(img,(0,0),(500,500),(0,0,255),3)

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

사각형 그리기

TOP LEFT Conrner와 BOTTOM-RIGHT Conrner점을 연결하는 사각형을 그려줍니다.

cv2.rectangle(img, start, end, color, thickness)

Parameters

  • img: 그림을 그릴 이미지 파일
  • start: 시작 좌표 (ex : (0,0))
  • end: 종료 좌표 (ex: (500,500))
  • color: BGR형태의 Color(ex: (0,255,0) ->Green)
  • thickness: 선의 두께
import cv2

img = cv2.imread('./blank_500.jpg')
img = cv2.rectangle(img,(50,50),(450,450),(0,0,255),3)

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

타원 그리기

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) → img

Parameters

  • img: 그림을 그릴 이미지 파일
  • center: 타원의 중심
  • axes: 중심에서 가장 큰 거리와 작은 거리
  • angle:  타원의 기울기 각
  • startAngle: 선의 두께
  • endAngle: 타원이 끝나는 각도
  • color: 타원의 색
  • thickness: 선두께 ( -1이면 안쪽을 채웁니다.)
import cv2

img = cv2.imread('./blank_500.jpg')
img = cv2.ellipse(img,(250,250),(100, 50),0,0,360,(0,0,255),3)

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

다각형 그리기

cv2.polylines(img, pts, isClosed, color, thickness)

 

 

Parameters

  • img: 그림을 그릴 이미지 파일
  • pts(array): 연결할 꼭짓점의 좌표
  • axes: 중심에서 가장 큰 거리와 작은 거리
  • isClosed:  닫힌 도형 여부
  • color: 선의 두께
  • thickness: 타원이 끝나는 각도
import cv2
import numpy as np

pts1 = np.array([[100,100],[270,100],[300,330],[170,350],[100,250],[50,150]])
img = cv2.imread('./blank_500.jpg')
img = cv2.polylines(img,[pts1],True,(255,0,0),2)

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

※ 여기서 pts의 매개변수를 Numpy를 이용하여 행렬로 선언하여 그렸습니다.

이미지에 Text 추가

cv2.putText(img, text, org, font, fontSacle, color, thickness)

Parameters

  • img: 그림을 그릴 이미지 파일
  • text: 표시할 문자열
  • org: 문자열이 표시될 위치, 문자열의 Bottom-Left Corner점 
  • font:  font 타입. Cv2.FONT_~~
  • fontScale: Font 사이즈
  • color: Font 컬러
  • thickness: Font의 두께
import cv2

img = cv2.imread('./blank_500.jpg')
cv2.putText(img, 'OpenCV_Python', (10,400), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0),3)

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

 

반응형