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() |
- 안쪽을 채운 원
두께값을 -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) |
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() |
- 선을 그리는 각도 설정
타원을 그릴 때 닫힌 선이 아닌 중간이 끊어진 타원을 그리는 방법 입니다. . 선의 시작 각도와 종료 각도를 정해주면 타원의 일부만 그리기가 가능 합니다.
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() |
- 사각형 안쪽 타원
사각형의 내부에 선을 그리는 형태로 타원을 그리는 방식 입니다.
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() |
사각형은 이해를 돕기위해 그린것 입니다.
- 사각형 회전
사각형에 회전 각도를 부여하고 회전된 사각형 내부에 타원을 그립니다.
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) |
'Tensorflow > OpenCV' 카테고리의 다른 글
OpenCV 1. 도형 그리기 문자 (Python) (5) | 2019.04.01 |
---|---|
OpenCV 1. 도형 그리기 다각형 (Python) (0) | 2019.03.30 |
OpenCV 1. 도형 그리기 사각형 (Python) (1) | 2019.03.26 |
OpenCV 1. 도형 그리기 점 선 (Python) (3) | 2019.03.25 |
anaconda에 opencv 설치하고 jupyter로 테스트 (9) | 2019.03.22 |