더북(TheBook)

IppImage 클래스의 대입 연산자 재정의와 Convert 함수의 전체 소스 코드는 소스 4-12에 나타내었다. Convert 멤버 함수에서 사용된 limit 함수에 대해서는 조금 뒤에서 설명할 것이다.

소스 4-12 IppImage 클래스 - 대입 연산자 재정의(IppImage.h)
template<typename T>
IppImage<T>& IppImage<T>::operator=(const IppImage<T>& img)
{
    if (this == &img)
        return *this;

    CreateImage(img.width, img.height);
    memcpy(pixels[0], img.pixels[0], sizeof(T) * width * height);

    return *this;
}

template<typename T> template<typename U>
void IppImage<T>::Convert(const IppImage<U>& img, bool use_limit)
{
    CreateImage(img.GetWidth(), img.GetHeight());

    int size = GetSize();
    T* p1 = GetPixels();
    U* p2 = img.GetPixels();

    if (use_limit)
        for (int i = 0; i < size; i++)
            p1[i] = static_cast<T>(limit(p2[i]));

    else
        for (int i = 0; i < size; i++)
            p1[i] = static_cast<T>(p2[i]);
}

IppImage 클래스가 가지고 있는 멤버 변수 정보는 아래 함수들을 이용하여 참조할 수 있다. IsValid 함수는 실제 영상 데이터를 가지고 있는지 검사하는 함수이다.

int   GetWidth()    const { return width; }
• int   GetHeight()   const { return height; }
• int   GetSize()     const { return width * height; }
• bool  IsValid()     const { return (pixels != NULL); }

이 외에도 IppImage 클래스의 멤버는 아니지만 영상 처리 알고리즘 구현 시 유용하게 사용할 전역 함수 limit를 만들어 사용할 것이다. 이 전역 함수는 다양한 자료형을 지원하기 위해 템플릿 함수로 정의하였으며 IppImage.h 파일에 인라인 함수로 정의되어 있다.

template<typename T> inline T limit(const T& value);

limit 함수는 인자로 넘어온 값을 0~255 사이의 범위로 한정시켜 주는 함수이다. 만약 value 값이 255보다 크면 255를 반환하고, 0보다 작으면 0을 반환한다.

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