더북(TheBook)

4.3.5 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등)

IppImage 클래스도 내부적으로 동적 할당한 메모리를 가지고 있기 때문에 대입 연산자를 재정의해주는 것이 좋다.

IppImage<T>& operator=(const IppImage<T>& img);

대입 연산자 재정의는 동일한 자료형으로 정의된 IppImage 클래스 객체를 대입할 때 사용된다. 즉, 아래와 같은 형태로 사용하면 에러가 발생한다.

IppByteImage img1;
IppFloatImage img2;
img2 = img1;

영상 처리를 하다 보면 입력 영상과 출력 영상은 그레이스케일 영상이지만, 내부적으로 알고리즘을 구현할 때에는 실수형으로 연산을 해야 하는 경우가 많다. 그러므로 픽셀 값은 그대로인데 픽셀을 표현하는 자료형만 변경하는 함수가 있으면 유용하다. 예를 들어 IppByteImageIppFloatImage로 바꾸거나 또는 그 반대 방향으로 변환할 수 있는 기능이 있으면 편리하다. IppImage 클래스에서는 Convert라는 이름의 멤버 함수를 만들어 서로 다른 자료형의 IppImage 객체로 변환하는 기능을 제공한다.

template<typename U> void Convert(const IppImage<U>& img, bool use_limit = false);

Convert 함수는 인자로 넘어오는 img 영상의 모든 픽셀 값을 for 루프와 static_cast 연산자를 이용하여 형변환하여 복사한다. static_case 연산자를 이용한 단순한 형변환을 수행하기 때문에 기본 자료형으로 구성된 IppImage 클래스끼리만 변환이 가능하다. 즉, IppRgbImage와 다른 기본 자료형으로 구성된 IppImage 클래스와는 상호 변환이 불가능하다. 두 번째 인자인 use_limittrue이면 static_cast 연산자로 형변환 시 결괏값을 0~255 사이의 값으로 한정하도록 설정한다. use_limit 인자는 기본 값으로 false를 받도록 선언했기 때문에 생략하여도 무방하다.

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