opencv及pil圖片飽和度問題 (sRGB 與 adobe RGB)

問題描述

adobe RGB編碼的圖片在經(jīng)過opencv, pillow等通用圖片處理庫時(shí)會(huì)出現(xiàn)顏色飽和度下降,呈現(xiàn)色差的問題,在使用imagemagick處理時(shí)并不會(huì)出現(xiàn)此現(xiàn)象。

問題定位

opencv, pillow等通用圖片處理庫默認(rèn)以sRGB編碼格式處理圖片,在讀取adobe RGB圖片時(shí)會(huì)出現(xiàn)該類情況。

sRGB 與 Adobe RGB 區(qū)別

sRGB與Adobe RGB是兩種表示顏色范圍的色域標(biāo)準(zhǔn)。sRGB色域應(yīng)用廣泛,包括Windows、Photoshop、大部分瀏覽器、顯示屏等的默認(rèn)配置都是sRGB。而AdobeRGB能夠覆蓋更廣泛的色域范圍
sRGB色域是一個(gè)通用的標(biāo)準(zhǔn)色域,是由微軟、惠普主導(dǎo)制定出來的標(biāo)準(zhǔn)色彩空間,意在讓顯示器、數(shù)位相機(jī)、掃描儀、投影儀等各種計(jì)算機(jī)外部設(shè)備與應(yīng)用軟件對于色彩有一個(gè)共通的語言。顯示設(shè)備能夠覆蓋的sRGB范圍越大,顯示的顏色就更加豐富飽滿。Adobe RGB是Adobe公司于1998年提出的實(shí)用性色彩空間,適合用來模擬印刷色,在印刷領(lǐng)域得到了廣泛應(yīng)用。

image.png

解決方案

使用 pillow 的ImageCMS 類,獲取圖片的icc信息,如果存在 icc_profile, 一般情況下,該圖片是以 adobe RGB編碼的。此時(shí),通過ImageCms進(jìn)行編碼轉(zhuǎn)換即可。

from PIL import Image, ImageCMS
import numpy as np
srgb = ImageCms.createProfile('sRGB')
def get_adobe(img):
    output = BytesIO()   
    output.write(img.info.get('icc_profile'))
    output.seek(0)
    adobe = ImageCms.getOpenProfile(output)     
    return adobe


def convert_to_srgb(image):
    if image.info.get('icc_profile', ''):
        adobe = get_adobe(image)
        image = ImageCms.profileToProfile(image, adobe, srgb)
    return image

參考資料

https://stackoverflow.com/questions/33142786/opencv-imwrite-gives-washed-out-result-for-jpeg-images
https://stackoverflow.com/questions/33168615/how-to-read-jpeg-image-with-adobe-rgb-colorspace-in-opencv

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容