【이미지 처리 100개 노크에 도전】Q.6.감색 처리

6555 단어 C++이미지 처리

사용한 라이브러리



【화상 처리 100개 노크】 독자적인 화상 입출력 클래스를 만든다

Q.6. 감색 처리



여기에서는 이미지의 값을 256^3에서 4^3, 즉 R,G,B in {32, 96, 160, 224}의 각 4값으로 감색하라. 이것은 양자화 조작이다.

이것은 간단합니다.
int _256to4(int val)
{
    int ret;
    if (0 <= val && val < 64) return 32;
    else if (64 <= val && val < 128) return 96;
    else if (128 <= val && val < 192) return 160;
    else return 224;
}

int main()
{
    PPM ppm("imori.pnm");
    int width = ppm.Get_width();
    int height = ppm.Get_height();
    PPM ppm2(width, height);

    for (int j = 0; j < height; j++)
        for (int i = 0; i < width; i++)
        {
            int r = ppm(i, j, 'r');
            int g = ppm(i, j, 'g');
            int b = ppm(i, j, 'b');

            int r2 = _256to4(r);
            int g2 = _256to4(g);
            int b2 = _256to4(b);

            ppm2(i, j, 'r') = r2;
            ppm2(i, j, 'g') = g2;
            ppm2(i, j, 'b') = b2;
        }

    ppm2.Flush("out.ppm");
    return 0;
}

좋은 웹페이지 즐겨찾기