이 예제 코드를 실행하면 콘솔 창에 “len = 34.1421”과 “area = 50” 문자열이 한 줄씩 출력됩니다.
OpenCV는 외곽선 또는 곡선을 근사화하는 approxPolyDP() 함수를 제공합니다. approxPolyDP() 함수는 주어진 곡선의 형태를 단순화하여 작은 개수의 점으로 구성된 곡선을 생성합니다. approxPolyDP() 함수 원형은 다음과 같습니다.
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed); |
|
• curve |
(입력) 2차원 점들의 좌표 |
• approxCurve |
(출력) 근사화된 점들의 좌표 |
• epsilon |
근사화 정밀도 파라미터. 입력 곡선과 근사화된 곡선까지의 최대 거리를 지정합니다. |
• closed |
폐곡선 여부. true이면 폐곡선이고, false이면 폐곡선이 아닙니다. |
approxPolyDP() 함수는 더글라스-포이커(Douglas-Peucker) 알고리즘을 사용하여 곡선 또는 다각형을 단순화시킵니다.3 더글라스-포이커 알고리즘은 입력 외곽선에서 가장 멀리 떨어져 있는 두 점을 찾아 직선으로 연결하고, 해당 직선에서 가장 멀리 떨어져 있는 외곽선상의 점을 찾아 근사화 점으로 추가합니다. 이러한 작업을 반복하다가 새로 추가할 외곽선상의 점과 근사화에 의한 직선과의 수직 거리가 epsilon 인자보다 작으면 근사화를 멈춥니다. epsilon 인자는 보통 입력 외곽선 또는 곡선 길이의 일정 비율(예를 들어 arcLength(curve, true) * 0.02)로 지정합니다. 보트 모양의 객체 외곽선에 대해 더글라스-포이커 알고리즘으로 외곽선 근사화를 수행하는 과정을 그림 12-12에 나타냈습니다.
▲ 그림 12-12 더글라스-포이커 알고리즘에 의한 외곽선 단순화
3 approxPolyDP() 함수 이름 맨 뒤의 DP는 더글라스-포이커의 영문 앞 글자를 나타냅니다. 더글라스-포이커 알고리즘에 대한 좀 더 자세한 설명은 http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm 웹 사이트를 참고하기 바랍니다.