2011-05-09 4 views
2

.BMP을로드 할 때 CImg을 사용할 때 회색 음영인지 또는 컬러 이미지인지 어떻게 알 수 있습니까? 나는 다음과 같이 시도했지만 실패했다 :CImg : 그레이 스케일을 저장하는 방법은 무엇입니까?

내 예상과
cimg_library::CImg<unsigned char> img("lena_gray.bmp"); 

const int spectrum = img.spectrum(); 

img.save("lenaNew.bmp"); 

, 아무리 내가 넣은 .BMP 어떤 종류의 스펙트럼은 항상 결과 3 수 없습니다, 나는 그레이 스케일을로드하고 저장할 때 결과 크기가 3 배 더 커집니다.

로드 된 이미지를 저장하고 싶습니다. 그레이 스케일로 저장하려면 어떻게해야합니까?

답변

1

BMP 형식은 항상 RGB 코드 데이터로 이미지를 저장합니다. 따라서 BMP를 읽으면 항상 컬러 이미지가 생성됩니다. 이미지가 스칼라 인 경우 모든 채널이 동일하므로 두 개를 버릴 수 있습니다 (첫 번째 채널은 유지). 당신이 스칼라 이미지가 있는지 확인하려면

img.channel(0); 

, 당신은

const CImg<unsigned char> R = img.get_shared_channel(0), 
          G = img.get_shared_channel(1), 
          B = img.get_shared_channel(2); 
if (R==G && R==B) { 
    .. Your image is scalar ! 
} else { 
    .. Your image is in color. 
} 
+0

이 항상 사실이 아니다으로, 채널 간의 평등을 테스트 할 수 있습니다. 때때로 값이 다릅니다. 비율은 같아야합니다. 즉, 각 픽셀의 채도를 계산하여 지시자로 사용할 수 있습니다. – zehelvion

관련 문제