我正在尝试计算任何给定图像每个像素使用多少种颜色可能性。
例如,如果图像每个像素使用8位,则它可以表示256个阴影之一。
我正在寻找以下内容:
CImg<unsigned char> inputImage(inputImageFilename.c_str());
CImgDisplay disp_input(inputImage,"input");
std::cout << sizeof(inputImage[0]);
我知道该特定图像的像素深度为8位。我希望这将输出8,然后可以将其用作2的指数以得到256(2 ^ 8 = 256)。但是它输出1,因此这不是一个选择。
我也尝试过
.depth()
,但很快意识到这并不涉及像素深度。有人可以帮我吗?
最佳答案
这里有两件事:
Class representing an image (up to 4 dimensions wide), each pixel being of type T.
这意味着像素深度由模板类型T定义。在您的情况下,这是
unsigned char
,其像素深度为8。如果您希望像素深度为16,则可以使用CImg<uint16_t>
。 CImg<unsigned char> inputImage();
unsigned int bit_depth;
inputImage.load_png(inputImageFilename.c_str(), &bit_depth);
std::cout << bit_depth;
由于我将unsigned char
用作类型T,因此即使文件的位深度为16,我也只能访问前8位。如果是bit_depth == 16
,则内部图像数据将保存为无符号短(也称为16位)。因此,以下应该是可能的: if (bit_depth == 16)
CImg<unsigned short> newImage(inputImage);
位深度当然也可以从文件的exif数据中读取。关于c++ - 如何获得CImg像素的位深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234832/