본문 바로가기

영상처리/opencv

OpenCV 를 이용해 도형그리기(직선,원,타원)

오늘 해볼 것은 OpenCV를 이용해 도형을 그려볼 것입니다. 코랩을 이용하였습니다.

동심으로 돌아가 본인이 그림그리기 공부를 한다고 가정했을 때, 우선은 스케치북이 필요하겠죠

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

from PIL import Image
import requests
from io import BytesIO
from google.colab.patches import cv2_imshow

img = np.zeros((512,512,3), np.uint8)

그리고 plt로 출력결과를 보겠습니다.

plt.imshow(img)
plt.show()

스케치북 완성

직선의 파라미터설명

img 그림을 그릴 이미지 파일
start 시작 좌표
end 종료 좌표
color BGR형태의 Color (e.g., (255, 0, 0)→Blue)
thickness (int) 선의 두께 (pixel)

그럼이제 직선을 그어보도록 하겠습니다.

img =cv2.line(img, (0, 0),(511,511), (255,0,0), 5)

plt.imshow(img)
plt.show()

첫좌표 끝좌표, 색상은 255,0,0(red)두께는 5

그리고 사각형을 그려보도록 하겠습니다.

파라미터설명

img 그림을 그릴 이미지
start 시작 좌표
end 종료 좌표
color BGR형태의 Color (e.g., (255, 0, 0)→Blue)
thickness (int) 선의 두께 (pixel)
img = cv2.rectangle(img, (400,0), (510, 128), (0,255,0),3)

plt.imshow(img)
plt.show()

이제 원도 그려봐야겠죠?

파라미터설명

img 그림을 그릴 이미지
center 원의 중심 좌표(x, y)
radian 반지름
color BGR형태의 Color
thickness 선 두께, -1이면 원 안쪽을 채움
lineType 선의 형태, cv2.line() 함수의 인수와 동일
shift 좌표에 대한 비트 시프트 연산
img = cv2.circle(img,(450,50),50,(0,0,255),-1)

plt.imshow(img)
plt.show()

참고로 두께를 -1값을 주면 안이 채워지고 +값을 넣으면 직선처럼 두께가 정해집니다.

이제는 타원입니다. 

파라미터설명

img image
center 타원의 중심
axes 중심에서 가장 큰 거리와 작은 거리
angle 타원의 기울기 각
startAngle 타원의 시작 각도
endAngle 타원이 끝나는 각도
color 타원의 색
thickness 선의 두께, -1이면 안쪽을 채움
lineType 선의 형태
shift 좌표에 대한 비트 시프트
img = cv2.ellipse(img, (256,256), (150,30),0,0,180,(0,255,0),-1)

plt.imshow부분은 생략하도록 하겠습니다.