2011-05-09 75 views
2

當我使用CImg加載.BMP時,如何知道它是灰度圖像還是彩色圖像? 我曾嘗試如下,但沒有成功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 2014-04-12 18:18:22