2

を使用CImgしてロードする場合.BMP、それがグレースケール画像かカラー画像かはどうすればわかりますか? 私は次のように試みましたが、失敗しました:

cimg_library::CImg<unsigned char> img("lena_gray.bmp");

const int spectrum = img.spectrum();

img.save("lenaNew.bmp");

私の予想では、どのような種類の.BMPデータを読み込んでも、スペクトルは常に 3 になります。その結果、グレースケールを読み込んで保存すると、結果のサイズは実際よりも 3 倍大きくなります。

ロードされたのと同じ画像を保存したいだけです。グレースケールで保存するにはどうすればよいですか?

4

1 に答える 1

1

BMP 形式は常に画像を RGB コード化されたデータとして保存するので、BMP を読み取ると常にカラー画像になります。画像がスカラーであることがわかっている場合は、すべてのチャネルが同じになるため、そのうちの 2 つを破棄できます (ここでは最初のチャネルを保持します)。

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.
}
于 2011-06-09T08:02:35.523 に答える