繁体   English   中英

如何获得 CImg 像素的位深度?

[英]How to get the bit depth of a CImg pixel?

我正在尝试计算任何给定图像的每个像素使用多少种颜色可能性。

例如,如果图像每像素使用 8 位,则它可以表示 256 种阴影中的一种。

我正在寻找类似以下的内容:

CImg<unsigned char> inputImage(inputImageFilename.c_str());
CImgDisplay disp_input(inputImage,"input");

std::cout << sizeof(inputImage[0]);

我知道这个特定的图像有 8 位像素深度。 我希望这将是 output 8,然后我可以将其用作 2 的指数以获得 256 (2^8 = 256)。 但它输出 1,所以这不是一个选项。

我也试过.depth()但很快意识到这不是指像素深度。

有人可以帮我吗?

这里有两件事:

  1. 文档指出:

    Class 表示图像(最多 4 维宽),每个像素的类型为 T。

    这意味着像素深度由模板类型 T 定义。在您的情况下,这是unsigned char导致像素深度为 8。如果您希望像素深度为 16,您可以使用CImg<uint16_t>

  2. 根据您正在阅读的文件类型,您可以确定位深度。 例如,Jpeg 的位深度为 8,而 png 的位深度为 8 或 16(至少 CImg 支持这一点)。 如果你有一个 png 文件并且想知道位深度,你可以使用 function load_png()如下:

     CImg<unsigned char> inputImage(); unsigned int bit_depth; inputImage.load_png(inputImageFilename.c_str(), &bit_depth); std::cout << bit_depth;

    由于我使用unsigned char作为类型,即使文件的位深度为 16,TI 也只能访问前 8 位。如果bit_depth == 16 ,则图像数据在内部保存为 unsigned short(又名 16 位)。 所以以下应该是可能的:

     if (bit_depth == 16) CImg<unsigned short> newImage(inputImage);

    位深当然也可以从文件的exif数据中读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM