더북(TheBook)

4.4.1 IppDib와 IppImage 클래스 변환 방법

이 책에서 만들 영상 처리 프로그램은 도큐먼트 클래스에서 IppDib 클래스 타입의 멤버 변수를 하나 가지고 있을 것이다. IppDib 클래스는 주로 비트맵 화면 출력 용도로 사용될 뿐이며 자체적인 픽셀 값 변경 기능을 가지고 있지 않다. 그러므로 실제 영상 처리를 수행할 때에는 IppDib 클래스를 IppImage 클래스로 변환한 후, IppImage 클래스만을 이용하여 영상 처리 알고리즘을 구현할 것이다. 그리고 영상 처리된 결과 영상을 화면에 보여줄 때에는 다시 IppImage 클래스를 IppDib 클래스로 변환할 것이다.

이를 위해 IppDib 클래스와 IppImage 클래스 간의 상호 변환 함수를 제공하려고 한다. 이 책에서는 그레이스케일 영상과 트루컬러 영상에 대한 영상 처리 기법만을 다루기 때문에 IppImage 중에서도 IppByteImageIppRgbImage만을 영상 처리 입출력 클래스로 사용한다. 그러므로 IppDib 클래스와 상호 변환되는 클래스도 이 두 개의 클래스만 지원하면 된다.

그림 4-9는 IppDib 클래스와 IppImage 클래스 간의 상호 변환할 때의 내부 데이터 변화를 보여준다. 그림 4-9의 왼편이 IppDib 클래스의 영상 저장 구조이다. IppDib 클래스에서는 픽셀 데이터가 상하 뒤집어져서 저장되어 있고, 픽셀 데이터를 제외한 여분의 정보(비트맵 정보 헤더, 색상 테이블)를 가지고 있기 때문에 단순한 영상 처리에서 사용하기에는 다소 적합하지 않다. 그림 4-9의 오른편에 나타난 IppImage 클래스는 영상의 픽셀 데이터, 가로, 세로 크기만을 가지고 있는 단순한 구조이므로 복잡한 영상 처리 알고리즘 내에서도 다루기가 편리하다. 게다가 영상도 뒤집어져 있지 않기 때문에 알고리즘 개발 시에 직관적인 접근이 가능하다는 장점도 있다.

그림 4-9 IppDib 클래스와 IppImage 클래스 상호 변환

IppDib 클래스와 IppImage 클래스의 상호 변환은 결국 DIB 구조에서 픽셀 데이터 부분만을 변환하는 것이라고 볼 수 있다. 다만 DIB 구조에서는 상하 뒤집힌 형태로 저장되어 있는 영상을 IppImage 클래스에서는 상하 정상 방향으로 바꾸어 주어야 한다. 또 한가지 주의할 점은 DIB 구조에서는 픽셀 데이터의 가로 한 줄이 4바이트 단위로 저장되기 때문에 여분의 바이트를 사용할 수 있다는 점이다. 그러므로 가로 크기가 4의 배수가 아닌 비트맵 영상은 이 점을 감안하여 변환해야 한다.

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