코드 12-5에 나타난 소스 코드는 입력 영상에 있는 모든 도형 객체의 바깥쪽 외곽선을 찾고, 각 외곽선을 근사화합니다. 만약 근사화된 외곽선이 점 세 개로 표현되면 삼각형이라고 판단하고, 점 네 개로 표현되면 사각형이라고 판단합니다. 그리고 삼각형과 사각형이 아닌 도형에 대해서는 원에 가까운 모양인지를 검사합니다. 이때 외곽선 모양이 원에 가까운 형태인지를 판별하기 위해 다음 수식을 이용하여 외곽선 길이와 도형의 면적 비율 R을 조사합니다.
이 수식에서 A는 객체의 면적이고, P는 객체의 외곽선 길이입니다. 이 수식으로 구한 비율 R은 0에서 1 사이의 실수로 계산되며, 입력 도형이 원 모양에 가까울수록 1에 가까운 값을 가지게 됩니다. 코드 12-5에서는 다음 코드를 사용하여 비율 R 값을 계산하였습니다.
double len = arcLength(pts, true); double area = contourArea(pts); double ratio = 4. * CV_PI * area / (len * len);
이 코드에서 pts는 각 객체의 외곽선 좌표가 저장된 vector<Point> 객체이고, CV_PI는 원주율 π값을 저장하고 있는 OpenCV 상수입니다. 이렇게 구한 ratio 변수 값이 0.8보다 크면 원이라고 판단합니다.