[英]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.