簡體   English   中英

將 exr/pfm 保存到位圖 CImg

[英]Save exr/pfm to bitmap CImg

我正在嘗試將一些位圖文件轉換為自定義圖像( exrpfm等),然后再轉換回位圖:

CImg<float> image(_T("D:\\Temp\\test.bmp"));
image.normalize(0.0, 1.0);
image.save_exr(_T("D:\\Temp\\test.exr"));

一切順利( .pfm 文件相同),我的意思是exr文件沒問題, pfm文件也是如此。

但是當這個exrpfm文件我試圖轉換回位圖時:

CImg<float> image;
image.load_exr(_T("D:\\Temp\\test.exr"));    // image.load_pfm(_T("D:\\Tempx\\test.pfm"));
image.save_bmp(_T("D:\\Temp\\test2.bmp"));

結果,test2.bmp 是黑色的。 完全的。 為什么 ? 我做錯了什么?

一些圖像格式支持保存為浮點數,但大多數格式保存為無符號 8 位整數(或 uint8),這意味着正常圖像值是從 0 到 255。如果您嘗試將一個由 0 到 1 的浮點數組成的數組保存到不支持浮點數的格式,您的值很可能會轉換為整數。 當您使用大多數圖像查看軟件顯示圖像時,它會顯示為全黑,因為 0 是黑色而 1 幾乎是黑色。

最有可能的是,當您將圖像保存為位圖時,它會嘗試將值轉換為 uint8 但無法正確縮放。 您可以通過將 0 和 1 之間的歸一化值乘以 255 來解決此問題。 img = int(img*255)或使用 numpy img = (img*255).astype(np.uint8)

也有可能您的保存函數能夠以位圖格式保留浮點值。 但是,您的圖像查看軟件可能不知道如何查看/顯示浮動圖像。 也許在每行代碼之間使用一些 imshow 函數(matplotlib.pyplot 可以輕松顯示浮點灰度數組)來檢查數組是否與您期望的一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM