[英]How do you retrieve the colour space with CImg of an image loaded with CImg?
我正在用CIMG加載圖像,如下所示:
CImg<unsigned char> image("lena.png");
我怎么知道該圖像的例如四個通道代表RGBA顏色而不是CMYK? 我知道CImg<>::spectrum()
為我提供了通道數量,但即使文檔中也說: “像素值的含義與通道數量沒有關系(例如4通道圖像可能無意中代表了RGBA或CMYK彩色圖像)” 。
我已經搜索了文檔和教程,但是似乎沒有任何功能可以告訴我頻道數據的含義。
那么,我如何知道正在使用的數據類型? 我是否可以僅假設所有新加載的圖像均為RGB或RGBA?
如果您的圖片為PNG格式,則必須為RGB或RGBA,因為PNG不支持CMYK。
如果是JPEG,我會假設它是sRGB色彩空間,但是您可以先使用ImageMagick進行檢查,方法是:
identify -format "%[colorspace]" YourImage.xxx
我使用Imagemagick生成了CMYK圖像,並使用CImg加載了它。 由於色彩空間的緣故,它似乎不執行任何轉換,而僅將每個像素的第一個字節返回為紅色(實際上是青色),第二個返回為綠色(雖然是洋紅色),依此類推...
我還使用調試信息編譯了CImg ,並將cimg_use_jpeg
定義為1
(因此它使用libjpeg
)並逐步執行。 它可以在函數_load_jpeg
中的jpeg_info_struct
中看到該圖像是CMYK,但是它忽略了此信息-我想您可以修補CImg
並很容易地修改全局變量以存儲色彩空間-如果您喜歡黑客! 或者,您可以通過CImg GitHub頁面請求DavidTschumperlé這樣做,他確實對此進行了回復...
這是一個可能的解決方法。 如果您不使用cimg_use_jpeg
, cimg_use_png
或cimg_use_tiff
,則CImg會將讀取文件委托給ImageMagick的名為convert
的命令行工具。 然后它將圖像轉換為PNM格式(在管道中,不在磁盤上), CImg將從管道中讀取數據。 至關重要的是, ImageMagick始終將以 PNM格式寫入的圖像轉換為sRGB色彩空間,因此,如果您有ImageMagick轉換圖像(通過不使用CImg的內置庫),則您的圖像將始終以sRGB色彩空間讀取。 本質上, CImg這樣做是在委派給ImageMagick時讀取文件:
convert input.jpg pnm:-
並讀取輸出。
你會注意到,你的4通道(以前CMYK)圖像突然變得時CIMG已授權ImageMagick的 3通道(現在的sRGB)圖像,因為從ImageMagick的輸出是一個必然3通道,PNM文件。
如果您想走得更遠...
如果設置環境變量,則可以控制CImg在哪里尋找convert
,因此可以將其指向真正的ImageMagick convert
周圍的自己的“包裝器” 。
因此,具體來說,如果您這樣做:
export cimg_convert_path="/Users/YourUser/bin/convertWrapper"
在其中運行任何帶有CImg的程序之前或在程序開始時,執行以下操作:
setenv("cimg_convert_path","/Users/YourUser/bin/convertWrapper",1);
CImg將運行以下命令來加載文件:
/Users/YourUser/bin/convertWrapper input.jpg pnm:-
因此,我建議在該包裝文件中,您可以修改傳遞來進行convert
的參數,以便它實際執行其他操作:
convert input.jpg -auto-level pnm:-
因此, convertWrapper
將包含:
#!/bin/bash
# Pick up arguments and put in array
args=( "$@" )
# Remove last argument ("pnm:-")
unset 'args[${#args[@]}-1]'
# Add our "-auto-level" parameter in before last item
args+=("-auto-level")
# Re-append "pnm:-"
args+=("pnm:-")
# Debug output to /tmp/a
echo "BEFORE: $@" >> /tmp/a
echo "AFTER: ${args[@]}" >> /tmp/a
# Call real "convert" with modified parameters
/usr/local/bin/magick "${args[@]}"
這種方法意味着您不需要修改CImg 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.