[英]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()
但很快意识到这不是指像素深度。
有人可以帮我吗?
这里有两件事:
该文档指出:
Class 表示图像(最多 4 维宽),每个像素的类型为 T。
这意味着像素深度由模板类型 T 定义。在您的情况下,这是unsigned char
导致像素深度为 8。如果您希望像素深度为 16,您可以使用CImg<uint16_t>
。
根据您正在阅读的文件类型,您可以确定位深度。 例如,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.