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개의 꼭지점 좌표가 반환된다.

'opencv' 카테고리의 다른 글

Color Transform  (0) 2025.10.30
findContours 의 CV_RETR_TREE 옵션과 hierarchy 의 관계  (0) 2025.06.26
Barcode 읽기  (0) 2025.02.23
close contours (convexHull 사용)  (0) 2025.02.16
스캔 이미지 중 여러 영수증 분리하기  (0) 2025.02.15