cv:: findContours() 나 cv::connectedComponentsWithStats() 에 의한 오브젝트를 찾아서 rectangle로 표현하기도 한다.
결함을 검출하는 시스템이라면 결함부분을 rectangle로 표시를 하는데 가까운 결함들은 통합하기도 하기때문에 도움이 되리라고 생각한다.
아래와 같이 두개의 cv::Rect 가 있을 경우,
- A B 가 교차하고 있는지 확인
cv::Rect rectA = cv::Rect(50, 50, 100, 50); cv::Rect rectB = cv::Rect(200, 80, 70, 50); if ((rectA & rectB).area() > 0) // 붙어 있음 else // 떨어져 있음 |
2. A B 를 통합
cv::Rect rectAB = rectA | rectB; |
3. A 와 B의 거리가 100 픽셀 이내에 있는지 확인
cv::Point pt(-100, -100); cv::Size sz(200, 200); rectA += pt; rectA += sz; if ((rectA & rectB).area() > 0) // rectB 가 rectA 의 100 픽셀 확장과 겹침 else // 안겹침 |
4. 조작하고자 하는 rectangle이 이미지 범위내에 있는지 확인
// cv::Mat image 가 이미지를 담고 있다고 하면 // 이미지 전체 사이지 cv::Rect imgRect(0, 0, image.cols, image.rows); // 액세스할 이미지 일부분 cv::Rect rect(-100, 30, 200, 200); // 아래의 경우는 예외가 발생 // cv::Mat part = image(rect) // 예외 발생을 방지하려면 // if (rect.x >= 0 && rect.y >= 0 && (rect.x + rect.width) <= image.cols .... // 위에 같이 하려면 번거롭기 때문에 아래와 같이 간단하게 처리하자. rect = (rect & imgRect); |
'opencv' 카테고리의 다른 글
스캔문서의 기울기 알아보기 (0) | 2023.11.26 |
---|---|
(opencv) 이미지 저장형태, 액서스 (1) | 2023.11.25 |
(opencv) pixel access time (0) | 2023.08.09 |
(opencv) Mat 의 기초 (0) | 2023.08.05 |
(opencv) 환경설정 (0) | 2023.08.05 |