logo

좌표로 도형과 글자 그리기

실습 준비

import cv2 as cv
from PIL import Image

image = cv.imread("balloon.webp")
height, width, _ = image.shape

관심 영역의 위치와 크기를 좌표로 정의

x = width // 2  # ROI의 시작을 가로 중앙에 배치
y = height // 3  # ROI의 시작을 세로 1/3 지점에 배치
w = width // 4  # 전체 가로의 1/4을 ROI 너비로 사용
h = height // 5  # 전체 세로의 1/5를 ROI 높이로 사용

복사본 만들기

cv.rectangle(), cv.circle(), cv.putText()는 전달한 배열을 직접 수정. 원본을 보존하려면 그리기 전에 복사본 생성.

annotated = image.copy()

사각형 그리기

OpenCV 그리기 함수의 좌표 순서는 (x, y). NumPy 인덱싱의 [y, x]와 구분.

cv.rectangle(
    annotated,
    (x, y),
    (x + w - 1, y + h - 1),  # ROI에 포함되는 오른쪽 아래 꼭지점
    (0, 255, 0),  # BGR의 초록
    3,  # 테두리 두께
)

원 그리기

cv.circle(
    annotated,
    (x + w // 2, y + h // 2),
    6,  # ROI 중심을 표시할 반지름
    (0, 0, 255),  # BGR의 빨강
    -1,  # 원 내부를 채움
)

텍스트 쓰기

cv.putText(
    annotated,
    "ROI",
    (x, y - 10),  # ROI 테두리 위쪽에 글자를 배치
    cv.FONT_HERSHEY_SIMPLEX,
    0.8,  # 글자 크기
    (0, 255, 0),  # BGR의 초록
    2,  # 글자 두께
    cv.LINE_AA,  # 계단 현상을 줄이는 선 유형
)

Image.fromarray(cv.cvtColor(annotated, cv.COLOR_BGR2RGB))

열기구 사진에 초록색 ROI 사각형, 빨간 중심점과 ROI 글자를 표시한 결과

초록색 사각형은 관심 영역, 빨간 점은 중심 좌표, ROI는 영역 이름을 표시.

Previous
이미지 좌표계와 픽셀 조작