opencv
findContours 의 결과 포인트들을 좀 더 심플하게 가공
꼰대코더
2025. 6. 25. 20:07

오른쪽으로 3.5 도 기울어짐 B/W 이미지
이 기울어진 물체의 외곽 좌표들을 아래와 같이 findContours 를 이용하여 추출 할 수 있다.
| cv::Mat bw = cv::imread("..... "); std::vector<std::vector<cv::Point>> contours; std::vector<cv::Vec4i> hierarchy; cv::findContours( bw , contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); |
하지만 기울림으로 인하여 인위적인 계단이 생겼기 때문에 이 경우에는 196 포인트의 좌표가 추출 된다.

이 계단 형태의 좌표들을 상쇄하여 심플한 직선 좌표를 얻고자 한다면 approxPolyDP 를 이용하여 contours 결과값을 가공하자.
| std::vector<std::vector<cv::Point>> approx_contours; for (const auto& contour : contours) { std::vector<cv::Point> approx_contour; double epsilon = 0.01 * arcLength(contour, true); approxPolyDP(contour, approx_contour, epsilon, true); approx_contours.push_back(approx_contour); } |
위의 approx_contour 에는 4개의 꼭지점 좌표가 반환된다.