더북(TheBook)

IppHoughLine 함수에 전달되는 입력 영상 img는 엣지 픽셀로 구성된 엣지 영상이어야 한다. 즉, 엣지는 흰색으로 표시되고 엣지가 아닌 영역은 검정색으로 구성된 영상을 입력으로 사용해야 한다. IppHoughLine 함수 구현에서는 픽셀 값이 128보다 큰 픽셀을 엣지로 간주하여 처리한다. 그러므로 캐니 엣지 검출기에 의해 구해진 엣지 영상을 입력으로 사용하면 무난하다.

IppHoughLine 함수에 의해 검출된 직선 성분을 직접 눈으로 확인하기 위하여, IppImage 영상에 직선을 그리는 기능을 추가해보자. IppImage 영상에 직선을 그리기 위해서는 직선 위치에 해당하는 픽셀 값을 직접 수정해야 한다. 직선을 그리기 위한 함수 이름은 IppDrawLine을 사용하기로 하고, IppFeature.h 파일에 아래와 같이 함수 선언을 추가하자.

void IppDrawLine(IppByteImage& img, IppLineParam line, BYTE c);
void IppDrawLine(IppByteImage& img, int x1, int y1, int x2, int y2, BYTE c);

첫 번째 IppDrawLine 함수는 인자로 넘어온 img 영상에 IppLineParam 정보를 이용하여 직선을 그리는 역할을 한다. 이때 직선의 밝기 값은 마지막 함수 인자인 c에 지정한다. 그러나 실제로 직선을 그리기에는 파라미터를 이용하는 것보다 일반적인 형태의 수식을 이용하는 것이 편리하다. 그러므로 첫 번째 IppDrawLine 함수에서는 직선의 시작 좌표 (x1, y1)과 끝 좌표 (x2, y2)를 계산하여 두 번째 IppDrawLine 함수를 호출한다. 다만 x 좌표가 0인 경우와 w-1인 경우에 대하여 y 좌표의 값을 계산한 후 두 번째 IppDrawLine 함수를 내부적으로 호출한다. 두 번째 IppDrawLine 함수는 인자로 넘어온 dib 비트맵에 (x1, y1) 좌표부터 (x2, y2) 좌표까지 그레이스케일 값 c를 이용하여 직선을 그린다. 이때 각각의 IppDrawLine 함수에서 수직선을 그리는 방법은 따로 고려하여 함수를 작성하였다.

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