더북(TheBook)

HoughLinesP() 함수를 사용하여 직선을 검출하는 예제 코드를 코드 9-4에 나타냈습니다. 코드 9-4에 나타난 hough_line_segments() 함수의 구성은 앞서 소개한 코드 9-3의 hough_lines() 함수와 거의 유사합니다. 다만 HoughLinesP() 함수는 검출한 직선의 시작점과 끝점의 좌표를 반환하기 때문에 검출된 직선을 그리는 코드가 훨씬 간단합니다. hough_line_segments() 함수가 정의된 소스 파일은 내려받은 예제 파일 중 ch09/hough 프로젝트에서 확인할 수 있습니다.

코드 9-4 확률적 허프 변환 선분 검출 예제 [ch09/hough]

01    void hough_line_segments()
02    {
03        Mat src = imread("building.jpg", IMREAD_GRAYSCALE);
04     
05        if (src.empty()) {
06            cerr << "Image load failed!" << endl;
07            return;
08        }
09     
10        Mat edge;
11        Canny(src, edge, 50, 150);
12     
13        vector<Vec4i> lines;
14        HoughLinesP(edge, lines, 1, CV_PI / 180, 160, 50, 5);
15     
16        Mat dst;
17        cvtColor(edge, dst, COLOR_GRAY2BGR);
18     
19        for (Vec4i l : lines) {
20            line(dst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255),
                   2, LINE_AA);
21        }
22     
23        imshow("src", src);
24        imshow("dst", dst);
25     
26        waitKey(0);
27        destroyAllWindows();
28    }

 

3행 building.jpg 영상을 그레이스케일 형식으로 불러와 src에 저장합니다.

11행 캐니 에지 검출기를 이용하여 구한 에지 영상을 edge에 저장합니다.

13~14행 HoughLinesP() 함수를 이용하여 모든 직선 성분의 시작점과 끝점 좌표를 구합니다.

17행 그레이스케일 에지 영상 edge를 BGR 3채널 컬러 영상으로 변환하여 dst에 저장합니다.

19행 HoughLinesP() 함수에 의해 구해진 모든 직선 성분을 dst 영상 위에 빨간색 직선으로 그립니다.

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