관심영역(ROI)이란, 영상이나 이미지에서 특정 부분만을 선택해 집중적으로 처리하는 영역을 말합니다.

전체 이미지를 대상으로 연산하는 대신, 관심 있는 영역만 잘라서 작업하면 처리 속도와 정확도를 모두 높일 수 있습니다.

아래는 휴가 기간에도 과제를 하고 있는 불쌍한 강아지의 사진입니다.

Sorry to bother you but can you make the lecture slides.png

이 이미지에서 특정 부분(예: 학생의 얼굴이나 노트북 화면 등)만 ROI로 지정해 표시하는 방법을 살펴보겠습니다.

고정 좌표로 ROI 표시

아래 코드를 실행하면 강아지 주위를 초록색 사각형으로 표시한 이미지가 생성됩니다.

import cv2
import numpy as np

img = cv2.imread(r"C:\\Users\\danny\\Desktop\\Sorry to bother you but can you make the lecture slides?.png")

# 관심 영역 좌표 (왼쪽 위 x, y, 너비 w, 높이 h)
x, y, w, h = 630, 100, 200, 200

# 1) ROI 추출 (슬라이싱)
roi = img[y:y+h, x:x+w]      # shape: (h, w, 3)

print("ROI shape:", roi.shape)

# 2) ROI 전체에 사각형 그리기 (roi 좌표계 기준: (0,0) ~ (w-1, h-1))
cv2.rectangle(roi, (0, 0), (w-1, h-1), (0, 255, 0), 2)

cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

위 코드는 고정 좌표로 ROI를 표시한 예제입니다.

x, y, w, h = 630, 100, 200, 200

x,y는 관심 영역의 픽셀 위치, w,h는 가로 세로 픽셀 길이를 의미합니다.

cv2.imread()는 이미지를 NumPy 배열로 불러옵니다. 이미지는 배열이므로 슬라이싱(slicing)으로 원하는 부분만 선택할 수 있습니다. 예를 들어 img[y:y+h, x:x+w]는 지정한 좌표의 영역을 잘라내어 roi에 저장합니다.

cv2.rectangle(roi, (0,0), (w-1,h-1), (0,255,0))

위 코드는 ROI 전체에 녹색 사각형을 그려 시각적으로 표시하는 코드입니다.

cv2.rectangle(img, (x, y), (x+w, y+h), (0,255,0))