簡體   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