더북(TheBook)

소스 4-17에서 IppFloatImage 타입을 IppDib 타입으로 변환하는 함수에 대해서만 잠깐 살펴보자. IppFloatImage 타입에서 픽셀 값은 float 자료형을 사용하기 때문에 unsigned char 자료형으로 픽셀 값을 표현하는 IppDib 타입으로 변환 시 memcpy 함수를 사용할 수 없다. 그러므로 for 루프 안에서 각각의 픽셀 위치를 참조하여 static_cast 연산자로 픽셀 값을 변환하였다. 이때 0보다 작거나 255보다 큰 값은 모두 0 또는 255로 설정되도록 limit 함수도 함께 사용하였다.

지금까지 IppDibIppImage 클래스 간의 상호 변환 함수 구현까지 알아보았다. 이제 실제 영상 처리 알고리즘을 구현할 때 이 변환 함수들을 어떻게 사용할 것인지 알아보도록 하자. 아래 코드 블록을 살펴보자.

Ippdib dib1;
dib1.Load("C:\\test.bmp"); // (1)

IppByteImage img1;
IppDibToImage(dib1, img1); // (2)
// img1을 이용하여 영상 처리 수행

IppDib dib2;
IppImageToDib(img1, dib2); // (3)

위에서 (1)번 코드가 수행되면 dib1은 C:\test.bmp 파일의 비트맵 영상을 가지게 된다. 이후 (2)번 코드까지 수행되면 img1dib1과 동일한 영상을 가지게 된다. 이후부터는 img1을 이용하여 영상 처리를 수행하고, 그 결과를 다시 img1에 저장하도록 코드를 작성하면 된다. 영상 처리 결과를 화면에 나타내려면 img1IppDib 형태로 변환해야 한다. 그러므로 (3)번처럼 새로운 IppDib 타입의 변수 dib2를 선언하여 img1dib2로 변환하였다. 이러한 코드 전개는 향후 이 책에서 본격적인 영상 처리 알고리즘을 설명하는 6장부터 자주 사용될 것이다.

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