머신러닝 & 딥러닝/컴퓨터 비전

[OpenCV with Python] - 03. 간단한 도형 그리기 (선, 사각형, 원)

by seokii 2021. 9. 4.
728x90
반응형

코드 및 이미지 : https://github.com/Seokii/Study_OpenCV

 

GitHub - Seokii/Study_OpenCV: study about OpenCV

study about OpenCV. Contribute to Seokii/Study_OpenCV development by creating an account on GitHub.

github.com

 

이번에는 OpenCV를 활용하여 선, 사각형, 원을 그려보는 코드를 구현해 보도록 하겠습니다.

 

1. 함수 설명

1.1. cv2.line()

cv2.line (img, pt1, pt2, color, thickness, lineType, shift) -> img

  • img : 이미지
  • pt1, pt2 : 시작점, 종료점 좌표 (x, y)
  • color : 색상 (blue, green, red) -> (0~255, 0~255, 0~255)
  • thickness : 선 굵기 (default: 1)
  • lineType : 선 종류 (cv2.LINE_4, LINE_8, LINE_AA)
  • shift : 좌표 값의 축소 비율 (default: 0)

 

1.2. cv2.rectangle()

cv2.rectangle(img, pt1, pt2, color, thickness, llineType, shift) -> img

위와 동일

 

1.3. cv2.circle()

cv2.circle(img, center, radius, color, thickness, lineType, shift) -> img

  • img : 이미지
  • center : 원의 중심 좌표 (x, y)
  • radius : 원의 반지름
  • 나머지는 위와 동일

cv2.line & cv2.rectangle & cv2.circle 을 이용하여 OpenCV에서는 선, 사각형, 원을 그릴 수 있습니다.

 

 

2. 주피터 노트북으로 구현하기

import numpy as np
import cv2

- 필요한 라이브러리를 불러옵니다.

 

R, G, B = (0,0,255), (0,255,0), (255,0,0)
img = np.zeros((800, 800, 3), np.uint8)
img[:] = (255, 255, 255)

- 색상 변수를 선언합니다. 3개의 원소를 갖는 튜플로 선언하며 각각 순서대로 파랑, 초록, 빨강입니다.

- img : 800x800의 크기의 3채널 np.uint8형으로 행렬을 생성합니다.

- img[ : ] : 행령의 모든 화소를 흰색으로 지정했습니다.

 

cv2.line(img, (20,20), (100,100), R)
cv2.line(img, (120,20), (200,100), G, 2)
cv2.line(img, (220,20), (300,100), B, 3)
cv2.line(img, (320,20), (400,100), R, 5, cv2.LINE_AA)

cv2.imshow("drawing figures", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

- cv2.line()을 사용해서 만든 결과입니다. 선의 색상과 굵기가 코드에 따라 바뀌는 모습을 볼 수 있습니다.

- cv2.LINE_AA는 안티 앨리어싱의 기능으로 좀더 부드러운 선의 모양을 제공하는 기능입니다.

 

 

cv2.rectangle(img, (20,150), (170, 300), R, 1)
cv2.rectangle(img, (190,150), (340, 300), G, 3)
cv2.rectangle(img, (360,150), (510, 300), B, -1)

cv2.imshow("drawing figures", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

- cv2.rectangle()을 사용해서 만든 결과입니다. 선의 색상과 굵기가 코드에 따라 바뀌는 모습을 볼 수 있습니다.

- 굵기를 -1로 설정하면 내부가 채워지는 것도 확인할 수 있습니다.

 

cv2.circle(img, (120,500), 100, R, 3)
cv2.circle(img, (340, 500),100, G, 3, cv2.LINE_AA)
cv2.circle(img, (570, 500),100, B, -1, cv2.LINE_AA)

cv2.imshow("drawing figures", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

- cv2.circle() 또한 사각형을 그리는 것과 유사하다는 것을 확인하실 수 있습니다.

 

 

728x90
반응형

댓글