더북(TheBook)

findContours() 함수로 객체의 외곽선을 찾고, 검출된 외곽선을 drawContours() 함수로 그리는 예제 프로그램 소스 코드를 코드 12-3에 나타냈습니다. 코드 12-3의 contours_basic() 함수는 이진 입력 영상에서 모든 외곽선을 찾아 각기 다른 색상으로 외곽선을 그립니다. contours_basic() 함수가 정의된 소스 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch10/findcts 프로젝트에서 확인할 수 있습니다.

코드 12-3 외곽선 검출과 그리기 [ch10/findcts]

01    void contours_basic()
02    {
03        Mat src = imread("contours.bmp", IMREAD_GRAYSCALE);
04     
05        if (src.empty()) {
06            cerr << "Image load failed!" << endl;
07            return;
08        }
09     
10        vector<vector<Point>> contours;
11        findContours(src, contours, RETR_LIST, CHAIN_APPROX_NONE);
12     
13        Mat dst;
14        cvtColor(src, dst, COLOR_GRAY2BGR);
15     
16        for (int i = 0; i < contours.size(); i++) {
17            Scalar c(rand() & 255, rand() & 255, rand() & 255);
18            drawContours(dst, contours, i, c, 2);
19        }
20     
21        imshow("src", src);
22        imshow("dst", dst);
23     
24        waitKey(0);
25        destroyAllWindows();
26    }

 

3행 contours.bmp 파일을 그레이스케일 형식으로 불러와 src에 저장합니다. contours.bmp는 픽셀 값이 0과 255로 구성된 이진 영상입니다.

10~11행 src 영상으로부터 모든 외곽선을 검출합니다. 외곽선의 계층 정보는 추출하지 않습니다.

13~14행 src 영상을 3채널 컬러 영상으로 변환하여 dst에 저장합니다.

16행 전체 외곽선 개수만큼 for 반복문을 수행합니다.

16~19행 contours에 저장된 각각의 외곽선을 임의의 색상으로 그립니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.