이전 글
원형
OpenCV를 이용해 원을 그릴 때는 cv2.circle 함수를 사용한다. cv2.circle 함수를 사용해 원을 그리기에 앞서 원의 색상과 반지름, 선의 두께를 지정한다. 또한 여기서 그리는 원에는 색을 채운 원과 색을 채우지 않은 원이 있다.
cv2.circle(그릴 위치, (원의 중심점), 반지름, 색상, 두께(또는 cv2.FILLED), 선의 종류)
색을 채우지 않은 원
원에 색을 채우지 않을 경우 원을 그리는 선의 두께를 지정한다(지정하지 않을 경우 기본값을 적용한다).
만약 반지름이 50, 두께가 10인 색을 채우지 않은 옥색 원을 그릴 경우 다음과 같이 작성한다.
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
# 색상 : 옥색
color = (255, 255, 0)
# 반지름 : 50
radius = 50
# 두께 : 10
thinckness = 10
#circle
cv2.circle(img, (200, 100), radius, color, thinckness, cv2.LINE_AA)
cv2.imshow("circle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
색을 채운 원
색상을 채워 원을 그릴 경우 두께를 입력했던 곳에 cv2.FILLED을 입력한다.
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
# 색상 : 옥색
color = (255, 255, 0)
# 반지름 : 50
radius = 50
#circle
cv2.circle(img, (200, 100), radius, color, cv2.FILLED, cv2.LINE_AA)
cv2.imshow("circle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
사각형
사각형을 그릴때는 cv2.rectangle() 함수를 사용한다. 사각형도 원과 같이 색을 채운 사각형과 색을 채우지 않은 사각형으로 나뉜다. 다만 원에서는 반지름의 길이를 입력받았다면 사각형은 그리는 사각형의 왼쪽 위의 좌표와 오른쪽 아래 좌표를 입력받는다.
cv2.rectangle(그릴 위치, (왼쪽 위 좌표), (오른쪽 아래 좌표), 색상, 두께(또는 cv2.FILLED), 선의 종류)
색을 채우지 않은 사각형
# ex. 녹색을 채우지 않은 사각형
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
# 색상 : 녹색
color = (0, 255, 0)
# 두께 : 3
thinckness = 3
# rectangle
cv2.rectangle(img, (100, 100), (200, 200), color, thinckness, cv2.LINE_AA)
cv2.imshow("rectangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
색을 채운 사각형
원과 같이 도형 안에 색생을 채울 경우 도형의 두께를 입력하는 자리에 cv2.FILLED를 대입한다.
# ex. 녹색을 채우지 않은 사각형
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
# 색상 : 녹색
color = (0, 255, 0)
# rectangle
cv2.rectangle(img, (100, 100), (200, 200), color, cv2.FILLED, cv2.LINE_AA)
cv2.imshow("rectangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
다각형
원과 사각형의 경우 cv2.circle, cv2.rectangle과 같은 함수가 있어다면, 다각형의 경우 사용자가 원하는 각의 도형을 그릴 수 있는 것이 아니라 직접 좌표를 입력해 선을 이어 그릴 수 있다. 이때는 cv2.ploylines()라는 함수를 사용한다.
cv2.polylines() 함수는 사용자가 그리고자 하는 도형의 좌표를 리스트형태로 입력받으며 각각의 좌표를 모두 이어 닫힌 도형을 그리거나(True), 다시 처음의 좌표까지 이어지지 않아 열린 도형(False)이 있다.
cv2.polylines(그릴 위치, 도형의 좌표, True/False, 색상, 두께, 선의 종류)
열린 다각형
열린 도형은 사용자의 입력을 받은 좌표를 이을 때, 첫 번째 좌표와 마지막 좌표는 이어지지 않아 열려있는 도형을 의미한다. 열린 도형을 그릴 때는 isClose = False로 입력한다.
# ex. 빨간색 열린 삼각형
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
color = (0, 0, 255)
thinckness = 3
pts1 = np.array([[100, 100], [200, 100], [100, 200]])
cv2.polylines(img, [pts1], False, color, thinckness)
cv2.imshow("triangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
닫힌 다각형
닫힌 다각형은 열린 다각형 cv2.polylines()에서 isClose 옵션만 True로 바꾸면 닫힌 다각형을 출력한다.
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
color = (0, 0, 255)
thinckness = 3
pts1 = np.array([[100, 100], [200, 100], [100, 200]])
cv2.polylines(img, [pts1], True, color, thinckness)
cv2.imshow("triangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
여러 개의 다각형
여러개의 다각형을 같이 그리는 경우 다각형의 좌표지점을 입력하는 리스트에 그리고자 하는 다각형의 좌표를 한 번에 담으면 여러 개의 다각형을 한 번에 그려낼 수 있다. 만약 삼각형 두 개를 같이 그린다고 했을 때 각각의 좌표를 한 리스트에 넣어 입력하면 사용자가 그리고자 했던 삼각형 두 개를 한 번에 그릴 수 있다.
# ex. 삼각형 두개 한번에 그리기
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
color = (0, 0, 255)
thinckness = 3
pts1 = np.array([[100, 100], [200, 100], [100, 200]])
pts2 = np.array([[200, 100], [300, 100], [300, 200]])
cv2.polylines(img, [pts1, pts2], True, color, thinckness, cv2.LINE_AA)
cv2.imshow("triangle_2", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
사용자가 지정한 좌표인 pts1과 pts2는 위 처럼 하나의 리스트에 나타낼 수도 있지만 리스트를 쓰지 않고 하나로 묶어 나타낼 수도 있다.
pts3 = np.array([[[100, 100], [200, 100], [100, 200]],
[[200, 100], [300, 100], [300, 200]]])
cv2.polylines(img, pts3, True, color, thinckness, cv2.LINE_AA)
색이 채워진 다각형
다각형의 경우 원형과 사각형과는 달리 함수의 옵션을 통해 색상을 채우는 것이 아니라 cv2.fillPoly라는 함수를 사용해 색상을 채운다.
cv2.fillPoly(그릴 위치, 채워야 하는 도형 좌표, 색상, 선 종류)
위에서 그렸던 두개의 삼각형을 색칠하면 다음과 같다.
import cv2
import numpy as np
img = np.zeros((360, 480, 3), dtype = np.uint8)
color = (0, 0, 255)
pts3 = np.array([[[100, 100], [200, 100], [100, 200]],
[[200, 100], [300, 100], [300, 200]]])
cv2.polylines(img, pts3, True, color, cv2.LINE_8)
cv2.fillPoly(img, pts3, color, cv2.LINE_8)
cv2.imshow("triangle_3", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
'Study > ML | DL' 카테고리의 다른 글
[Python] OpenCV를 이용한 이미지/영상 처리 - 파일 저장 (0) | 2023.05.17 |
---|---|
[Python] OpenCV를 이용한 이미지/영상 처리 - 텍스트 (0) | 2023.05.12 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기1(영역색칠, 직선) (0) | 2023.05.03 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 동영상 및 카메라 출력 (0) | 2023.05.02 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 이미지 출력 (0) | 2023.05.01 |