평균 연산은 IppAve라는 이름의 함수로 구현하도록 하겠다. 함수 이름에서 Ave는 평균을 뜻하는 영어 Average에서 차용하였다. IppEnhance.h 파일에 다음과 같이 함수의 선언을 추가하자.
bool IppAve(IppByteImage& img1, IppByteImage& img2, IppByteImage& img3);
IppAve 함수도 IppByteImage 클래스의 참조형 인자 세 개를 갖는다. img1과 img2는 평균 연산의 입력 영상이며, img3은 평균 연산을 수행한 결과가 저장될 영상이다. IppAve 함수의 구현은 소스 7-3에 나타내었다. IppAve 함수에서는 for 루프 안에서 limit 함수를 사용하지 않았는데, 이는 두 그레이스케일 값의 평균은 255보다 커지거나 0보다 작아지는 경우가 발생하지 않기 때문이다. 꼭 필요한 상황이 아니면 limit 함수를 사용하지 않음으로써 연산 속도를 조금이라도 빠르게 해주는 것이 좋다.
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; }