1.3


원은 복잡하지 않아 중심 점과 반지름만 정해주면 그릴 수 있습니다.

cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) → img


parameter 

 내용

 img

 이미지 파일

 center

 원의 중심 좌표(x, y)

 radius

 원의 반지름

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


중심과 반지름을 정하고 선의 두께를 조금씩 변경해서 그립니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

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

img = cv2.circle(img, (50, 50), 50, blue_color, 5)

img = cv2.circle(img, (150, 150), 50, green_color, 10)

img = cv2.circle(img, (210, 210), 60, red_color, 15)

 

cv2.imshow('circle',img)

cv2.waitKey(0)

cv2.destroyAllWindows()



opencv_circle_ellipse


- 안쪽을 채운 원

 

두께값을 -1로 하면 내부가 채워진 원을 그립니다.


img = cv2.circle(img, (50, 50), 50, blue_color, -1)

img = cv2.circle(img, (150, 150), 50, green_color, -1)

img = cv2.circle(img, (210, 210), 60, red_color, -1)



opencv_circle_ellipse



1.4 타원


ellipse() 함수는 2개가 있으며 그리는 방식에 차이가 있습니다.

 

- 회전 각도 설정

 

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


parameter

 내용

 img 이미지 파일

 center

 타원의 중심 좌표(x, y)

 axes

 축의 절반 길이(중심에서 긴 거리, 짧은 거리)

 angle

 타원의 기울기

 startAngle

 타원을 그리는 시작 각도

 endAngle

 타원을 그리는 종료 각도

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


parameter에서 axes만 알아보면 타원이 두개의 축으로 긴쪽과 짧은 쪽이 있는데 이 두 축 길이의 반을 의미 합니다실제로 사용 할때는(x축 방향 길이, y축 방향 길이)로 표현 합니다.  하단 예제를 보면 (50, 50), (50, 20), (20, 50)으로 표현이 됩니다.

각도를 부여하면 타원을 회전 시킬 수 있습니다. (+)의 각도는 시계 방향으로 회전 합니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

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

img = cv2.ellipse(img, (60,  70), (50, 50), 0, 0, 360, blue_color, 2)

img = cv2.ellipse(img, (170, 70), (50, 20), 0, 0, 360, green_color, 2)

img = cv2.ellipse(img, (290, 70), (20, 50), 0, 0, 360, red_color, -1)

# (+)의 각도 변환

img = cv2.ellipse(img, (60,  180), (50, 20), 0, 0, 360, green_color, 2)

img = cv2.ellipse(img, (170, 180), (50, 20), 45, 0, 360, green_color, 2)

img = cv2.ellipse(img, (290, 180), (50, 20), 90, 0, 360, green_color, -1)

# (-)의 각도 변환

img = cv2.ellipse(img, (60,  290), (50, 20),   0, 0, 360, red_color, 2)

img = cv2.ellipse(img, (170, 290), (50, 20), -45, 0, 360, red_color, 2)

img = cv2.ellipse(img, (290, 290), (50, 20), -90, 0, 360, red_color, -1)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows() 




opencv_circle_ellipse


- 선을 그리는 각도 설정


타원을 그릴 때 닫힌 선이 아닌 중간이 끊어진 타원을 그리는 방법 입니다.  선의 시작 각도와 종료 각도를 정해주면 타원의 일부만 그리기가 가능 합니다.


 import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

모두 0으로 되어 있는 빈 Canvas(검정색)

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

img = cv2.ellipse(img, (60,  70), (50, 50), 0,   0,  90, blue_color, 2)

img = cv2.ellipse(img, (170, 70), (50, 50), 0,  90, 180, blue_color, 2)

img = cv2.ellipse(img, (290, 70), (50, 50), 0, 180, 360, blue_color, 2)

(+)의 각도 변환

img = cv2.ellipse(img, (60,  180), (50, 50), 0,  90, 360, green_color, 2)

img = cv2.ellipse(img, (170, 180), (50, 50), 0, 180, 360, green_color, 2)

img = cv2.ellipse(img, (290, 180), (50, 50), 0,   0, 180, green_color, 2)

(-)의 각도 변환

img = cv2.ellipse(img, (60,  290), (50, 20), 0, 0,   90, red_color, -1)

img = cv2.ellipse(img, (170, 290), (50, 20), 0, 0,  180, red_color, -1)

img = cv2.ellipse(img, (290, 290), (50, 20), 0, 90, 360, red_color, -1)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows()




opencv_circle_ellipse


- 사각형 안쪽 타원

 

사각형의 내부에 선을 그리는 형태로 타원을 그리는 방식 입니다.

 

cv2.ellipse(img, box, color[, thickness[, lineType]]) → img


parameter 

 내용

 img

 이미지 파일

 box

 회전 사각형

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

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

img = cv2.rectangle(img, (50, 100), (250, 200), white_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 0), blue_color, 2)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


사각형은 이해를 돕기위해 그린것 입니다.


opencv_circle_ellipse


- 사각형 회전

 

사각형에 회전 각도를 부여하고 회전된 사각형 내부에 타원을 그립니다.


img = cv2.rectangle(img, (50, 100), (250, 200), white_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 0), blue_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 45), green_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 95), red_color, 2) 

 

opencv_circle_ellipse


+ Recent posts