Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib와 NumPy로 이미지 위에 원 그리기 완벽 가이드

이미지 처리나 객체 시각화 작업을 하다 보면 이미지 위에 원을 표시해야 하는 경우가 자주 있습니다. Matplotlib의 Circle 패치와 NumPy를 함께 사용하면 몇 줄의 코드만으로 손쉽게 구현할 수 있습니다.

구현 단계

Matplotlib와 NumPy를 사용해 이미지 위에 원을 그리려면 아래 순서대로 진행하면 됩니다.

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백을 조정합니다.

  • imread() 함수로 파일에서 이미지를 읽어 배열(array)로 가져옵니다.

  • NumPy를 이용해 원이 그려질 x, y 좌표 데이터를 생성합니다.

  • subplots() 메서드로 그림과 서브플롯을 생성합니다.

  • imshow() 메서드를 사용해 데이터를 2D 래스터 이미지 형태로 화면에 표시합니다.

  • axis('off')로 불필요한 축을 제거합니다.

  • 현재 축(ax)에 Circle 패치를 추가합니다.

  • show() 메서드로 최종 결과를 화면에 출력합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

img = plt.imread('bird.jpg')

x = np.random.rand(5) * img.shape[1]
y = np.random.rand(5) * img.shape[0]

fig, ax = plt.subplots(1)
ax.imshow(img)
ax.axis('off')

for xx, yy in zip(x, y):
    circ = Circle((xx, yy), 50, color='red')
    ax.add_patch(circ)

plt.show()

코드 설명

위 예제에서 핵심 부분을 살펴보면 다음과 같습니다.

  • plt.imread('bird.jpg'): 이미지 파일을 읽어 NumPy 배열로 변환합니다. 배열의 shape는 (높이, 너비, 채널) 형태입니다.

  • np.random.rand(5): 0과 1 사이의 난수 5개를 생성한 뒤, 이미지의 너비와 높이를 곱해 이미지 범위 안의 좌표를 만듭니다.

  • Circle((xx, yy), 50, color='red'): 중심 좌표 (xx, yy), 반지름 50픽셀인 빨간색 원을 정의합니다. 필요에 따라 fill=False, linewidth 등의 옵션으로 테두리만 있는 원도 그릴 수 있습니다.

  • ax.add_patch(circ): 생성한 원 패치를 현재 축에 추가해 실제로 화면에 나타나도록 합니다.

실행 결과

코드를 실행하면 새 이미지 위에 빨간색 원 5개가 무작위 위치에 표시됩니다. 이 기법은 객체 검출 결과 시각화, 관심 영역(ROI) 표시 등 다양한 컴퓨터 비전 작업에 응용할 수 있습니다.