
findContours 의 옵션에 CV_RETR_EXTERNAL 을 적용하면 아래와 같이 붉은 선 좌표를 추출한다.

하얀 사각형 안에 들어 있는 검정 사각형의 좌표도 필요로 할 경우가 있다.
필자는 결함 검사 프로그램에서 하얀 부분은 검사 영역, 검은 부분은 비 검사 영역으로 비주얼로 보여줄 필요가 있어서 모든 좌표가 필요했다.

이럴 경우 findContours 의 옵션에 CV_RETR_TREE 를 넣어 추출해 보자.
| cv::Mat bw = cv::imread("....."); std::vector<std::vector<cv::Point>> contours; std::vector<cv::Vec4i> hierarchy; cv::findContours(image_mask_inverse, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE); for (size_t i = 0; i < contours.size(); i++) { std::cout << "Contour " << i << ": "; std::cout << "Next=" << hierarchy[i][0] << ", "; std::cout << "Prev=" << hierarchy[i][1] << ", "; std::cout << "Child=" << hierarchy[i][2] << ", "; std::cout << "Parent=" << hierarchy[i][3] << std::endl; } |
결과 값으로서 아래와 같이 출력
| Contour 0: Next=1, Prev=-1, Child=-1, Parent=-1 Contour 1: Next=-1, Prev=0, Child=2, Parent=-1 Contour 2: Next=-1, Prev=-1, Child=-1, Parent=1 |
여기서 Parent = -1 의 경우는 독립된 하얀 물체의 contour 이고
Parent 가 -1 이 아닌 경우가 안에 들어 있는 검은 영역을 의미한다.
'opencv' 카테고리의 다른 글
| Color Transform (0) | 2025.10.30 |
|---|---|
| findContours 의 결과 포인트들을 좀 더 심플하게 가공 (1) | 2025.06.25 |
| Barcode 읽기 (0) | 2025.02.23 |
| close contours (convexHull 사용) (0) | 2025.02.16 |
| 스캔 이미지 중 여러 영수증 분리하기 (0) | 2025.02.15 |