더북(TheBook)

IppBitPlane 함수는 입력 영상 img1로부터 bit번째에 해당하는 비트 평면을 추출하여 img2에 저장한다. 그러므로 정수형으로 선언된 bit에는 0부터 7 사이의 값을 넘겨주어야 한다. IppBitPlane 함수의 구현은 소스 7-13에 나타내었다.

소스 7-13 비트 평면 분할 구현 함수(IppEnhance.cpp)
void IppBitPlane(IppByteImage& img1, IppByteImage& img2, int bit)
{
    img2.CreateImage(img1.GetWidth(), img1.GetHeight());

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

    for (int i = 0; i < size; i++)
    {
        p2[i] = (p1[i] & (1 << bit)) ? 255 : 0;
    }
}

소스 7-13에서 눈여겨봐야 할 부분은 for 루프 안쪽의 코드이다. 여기서 (1 << bit)는 시프트 연산자(<<)를 이용하여 1을 원하는 비트 위치로 이동시키고 있다. 예를 들어 bit가 4인 경우, (1 << bit) 연산을 거치면 2진수로 00010000(2)이 되어서 상위 네 번째 비트를 1로 설정하게 된다. 그리고 각 픽셀 값에 대해 & 연산자를 이용하여 해당 비트의 값이 0인지 1인지를 검사한다. 만약 해당 위치의 비트 값이 1이면 흰색(255)으로 나타내고, 0이면 검정색(0)으로 나타내도록 설정하였다.

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