ROI란 무엇인가요?
ROI(Region of Interest)는 말 그대로 이미지에서 관심 있는 영역을 지정해서 그 부분만 따로 처리하는 기법이에요.
예를 들어, 이미지 전체에서 사람 얼굴만 잘라내거나, 특정 좌표에 있는 물체만 추적할 때
전체 이미지를 대상으로 하는 것보다 ROI만 다루는 게 더 효율적이에요.
OpenCV에서는 Mat 객체를 이용해 간단히 ROI를 지정할 수 있어서 처리 속도와 메모리 사용 측면에서 매우 유리합니다.
Rect로 ROI 영역 지정하기
ROI는 보통 cv::Rect 객체를 이용해 (x, y, width, height) 형식으로 지정해요.
이때 x, y는 관심 영역의 시작 좌표이고, width, height는 너비와 높이예요.
아래 예제를 보면 쉽게 이해돼요.
cv::Mat image = cv::imread("sample.jpg"); cv::Rect roi(100, 50, 200, 150); // (x=100, y=50), 너비=200, 높이=150 cv::Mat cropped = image(roi); // ROI 영역만 잘라냄 |
이렇게 하면 cropped는 원본 이미지의 일부분만 참조하게 되고, 별도로 복사하지 않는 한 메모리를 공유하게 돼요.
ROI 활용 사례: 잘라내기부터 필터링까지
ROI는 단순히 이미지를 자르는 데만 쓰이지 않아요.
특정 영역만 필터링하거나, 텍스트를 넣거나, 모자이크 처리를 할 때도 ROI를 지정해서 효율적으로 작업할 수 있어요.
cv::Mat faceROI = image(roi); cv::GaussianBlur(faceROI, faceROI, cv::Size(15, 15), 0); // 얼굴 부분만 블러 처리 |
위 예제처럼 전체 이미지를 건드리지 않고 특정 영역만 블러 처리하거나
색상 변경, 경계선 그리기 등을 적용할 수 있어서 다양한 실전 응용이 가능해요.
실시간 영상에서 ROI를 동적으로 지정하는 방법
실시간 영상 스트리밍에서 ROI를 유동적으로 설정하려면
cv::VideoCapture와 cv::setMouseCallback() 함수를 함께 사용하면 됩니다.
사용자가 마우스로 영역을 드래그해서 ROI를 지정하고, 그 부분만 강조하거나 처리할 수 있어요.
실시간 영상 스트리밍에서 ROI를 동적으로 설정하려면
마우스 이벤트나 키보드 입력을 이용해 ROI 영역을 사용자가 직접 지정하거나
자동 검출 알고리즘과 결합하는 방식이 많이 사용돼요.
예를 들어, cv::setMouseCallback() 함수를 사용하면
사용자가 드래그하는 위치를 기준으로 Rect를 실시간으로 업데이트할 수 있고,
해당 ROI 영역만 추적하거나 필터링하는 등의 처리가 가능합니다.
또는 얼굴 인식, 객체 검출 알고리즘을 통해 프레임마다 ROI를 자동으로 설정해 추적하거나
인식 대상만 고속으로 처리할 수도 있어요.
이렇게 동적 ROI 설정을 활용하면 전체 프레임을 처리하는 비용을 줄이면서
실시간성과 정확성을 모두 확보할 수 있습니다.
ROI 사용 시 주의할 점
ROI를 지정할 때는 반드시 영역이 이미지 범위를 넘지 않도록 조심해야 해요.
예를 들어, 이미지가 640×480인데 ROI가 600, 450, 100, 50이면 범위를 초과해서 오류가 발생해요.
또한, 앞서 말했듯이 image(roi)는 원본 이미지와 메모리를 공유하므로,
ROI에 변화를 주면 원본도 같이 바뀐다는 점을 주의해야 해요.
만약 원본을 보존하면서 별도 처리를 원한다면 clone()이나 copyTo()를 사용하는 것이 좋아요.
이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~
'IT' 카테고리의 다른 글
OpenCV로 이미지 자르기와 리사이징 (0) | 2025.06.25 |
---|---|
OpenCV로 이미지 읽기, 저장, 표시하기 (0) | 2025.06.25 |
OpenCV에서 Color Space(BGR ↔ HSV 등) 변환하기 (0) | 2025.06.24 |
OpenCV Mat 클래스 구조와 메모리 이해 (0) | 2025.06.24 |
OpenCV Scalar 클래스 활용법! (0) | 2025.06.24 |