더북(TheBook)

평균 연산은 IppAve라는 이름의 함수로 구현하도록 하겠다. 함수 이름에서 Ave는 평균을 뜻하는 영어 Average에서 차용하였다. IppEnhance.h 파일에 다음과 같이 함수의 선언을 추가하자.

bool IppAve(IppByteImage& img1, IppByteImage& img2, IppByteImage& img3);

IppAve 함수도 IppByteImage 클래스의 참조형 인자 세 개를 갖는다. img1img2는 평균 연산의 입력 영상이며, img3은 평균 연산을 수행한 결과가 저장될 영상이다. IppAve 함수의 구현은 소스 7-3에 나타내었다. IppAve 함수에서는 for 루프 안에서 limit 함수를 사용하지 않았는데, 이는 두 그레이스케일 값의 평균은 255보다 커지거나 0보다 작아지는 경우가 발생하지 않기 때문이다. 꼭 필요한 상황이 아니면 limit 함수를 사용하지 않음으로써 연산 속도를 조금이라도 빠르게 해주는 것이 좋다.

소스 7-3 평균 연산의 구현(IppEnhance.cpp)
bool IppAve(IppByteImage& img1, IppByteImage& img2, IppByteImage& img3)
{
    int w = img1.GetWidth();
    int h = img1.GetHeight();

    if (w != img2.GetWidth() || h != img2.GetHeight())
        return false;

    img3.CreateImage(w, h);

    int size = img3.GetSize();
    BYTE* p1 = img1.GetPixels();
    BYTE* p2 = img2.GetPixels();
    BYTE* p3 = img3.GetPixels();

    for (int i = 0; i < size; i++)
    {
        p3[i] = (p1[i] + p2[i]) / 2;
    }

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