더북(TheBook)

코드 9-4의 hough_line_segments() 함수 실행 결과를 그림 9-15에 나타냈습니다. 그림 9-15에서 src는 입력 영상으로 사용한 building.jpg 파일이고, dst는 캐니 에지 검출 영상 위에 확률적 허프 변환에 의해 구해진 직선 성분을 함께 표시한 영상입니다. 확률적 허프 변환에 의해 실제로 직선이 있는 위치에서만 선분이 그려진 것을 확인할 수 있습니다.

▲ 그림 9-15 확률적 허프 변환 선분 검출 예제 실행 결과

 

Note

코드 9-4에서 확률적 허프 변환에 의해 검출된 직선 성분을 dst 영상에 그리는 코드에서 C++11의 범위 기반 for 반복문(range-based for loop) 문법을 사용하였습니다. 범위 기반 for 반복문은 vector 또는 배열 등에 저장되어 있는 모든 원소를 하나씩 꺼내어 사용할 때 편리합니다. 예를 들어 다음 코드는 vector<Vec4i> 타입으로 선언된 lines 객체에서 Vec4i 타입의 자료를 하나씩 꺼내어 변수 l에 저장한 후, dst 영상에 직선을 그리기 위해 사용합니다.

for (Vec4i l : lines) {
  line(dst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 2, LINE_AA);
}

범위 기반 for 반복문은 매우 사용하기 편리한 문법이고 OpenCV 소스 코드와 예제 코드에서도 자주 사용됩니다. 범위 기반 for 반복문에 대해 아직 익숙하지 않으신 분들은 최신 C++ 문법 책을 참고하기 바랍니다.

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