Rect 클래스란 무엇인가?
OpenCV에서 Rect는 사각형 영역(Region of Interest, ROI)을 정의할 때 사용되는 핵심 클래스입니다.
주로 이미지의 특정 영역을 선택하거나 처리할 때 활용되며, (x, y, width, height) 형식으로 구성됩니다.
여기서 (x, y)는 좌상단 꼭짓점의 좌표를 의미하고, width, height는 사각형의 가로, 세로 길이를 나타냅니다.
이미지에서 특정 영역을 잘라내거나, 객체를 감싸는 바운딩 박스를 정의할 때 매우 자주 사용됩니다.
cv::Rect rect(10, 20, 100, 50); // x=10, y=20, width=100, height=50 |
주요 생성자와 멤버 변수
Rect 객체는 다양한 방식으로 생성이 가능합니다.
가장 일반적인 방법은 (x, y, width, height)을 인자로 전달하는 것이고, Point 객체와 Size 객체를 조합해 만드는 것도 가능합니다. Rect는 아래와 같은 멤버 변수들을 가집니다:
- x, y: 좌상단 꼭짓점 좌표
- width, height: 가로, 세로 길이
cv::Point pt(10, 20); cv::Size sz(100, 50); cv::Rect rect(pt, sz); // Point와 Size를 이용한 생성 |
외에도 tl() (top-left), br() (bottom-right) 같은 편의 메서드를 제공하여 좌표를 쉽게 다룰 수 있습니다.
Rect를 이용한 이미지 자르기 및 그리기
가장 흔한 활용 사례는 이미지에서 특정 영역만 잘라내는 것입니다.
예를 들어, 얼굴 인식에서 검출된 얼굴 영역을 저장하거나 처리할 때 사용됩니다.
또한 rectangle() 함수와 함께 사용하여 이미지 위에 사각형을 그릴 수도 있습니다.
cv::Mat image = cv::imread("sample.jpg"); cv::Rect roi(50, 50, 200, 100); cv::Mat cropped = image(roi); // 이미지 자르기 cv::rectangle(image, roi, cv::Scalar(0, 255, 0), 2); // 녹색 사각형 그리기 |
단, roi가 이미지 범위를 벗어나지 않도록 항상 체크해야 합니다.
그렇지 않으면 프로그램이 예외를 발생시킵니다.
Rect의 연산 기능과 유용한 함수들
Rect 클래스는 더하기, 빼기, 교차(intersection), 병합(union) 등의 연산도 지원합니다.
두 개의 Rect 간 공통 영역을 구할 때 &, 전체 영역을 포함하는 사각형을 만들 때 | 연산자를 사용할 수 있어 매우 직관적입니다.
cv::Rect a(10, 10, 50, 50); cv::Rect b(30, 30, 50, 50); cv::Rect intersection = a & b; // 두 사각형의 교차 영역 cv::Rect merged = a | b; // 두 사각형의 병합 영역 |
또한 contains() 함수를 사용하면 특정 점이 사각형 안에 포함되는지도 확인할 수 있습니다
cv::Point p(15, 15); bool inside = a.contains(p); // true |
이처럼 Rect는 단순한 데이터 구조를 넘어 이미지 처리의 중요한 도구로서 다양한 기능을 제공합니다.
'IT' 카테고리의 다른 글
OpenCV Mat 클래스 구조와 메모리 이해 (0) | 2025.06.24 |
---|---|
OpenCV Scalar 클래스 활용법! (0) | 2025.06.24 |
OpenCV Size_ 클래스 (0) | 2023.05.18 |
OpenCV 개발툴 - Visual Studio 2019 (0) | 2023.05.17 |
OpenCV Point_ 클래스 (0) | 2023.05.17 |