opencv

findContours 의 CV_RETR_TREE 옵션과 hierarchy 의 관계

꼰대코더 2025. 6. 26. 00:08

 

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