美文网首页
opencv及pil图片饱和度问题 (sRGB 与 adobe

opencv及pil图片饱和度问题 (sRGB 与 adobe

作者: CapsulE_07 | 来源:发表于2019-06-19 00:12 被阅读0次

    问题描述

    adobe RGB编码的图片在经过opencv, pillow等通用图片处理库时会出现颜色饱和度下降,呈现色差的问题,在使用imagemagick处理时并不会出现此现象。

    问题定位

    opencv, pillow等通用图片处理库默认以sRGB编码格式处理图片,在读取adobe RGB图片时会出现该类情况。

    sRGB 与 Adobe RGB 区别

    sRGB与Adobe RGB是两种表示颜色范围的色域标准。sRGB色域应用广泛,包括Windows、Photoshop、大部分浏览器、显示屏等的默认配置都是sRGB。而AdobeRGB能够覆盖更广泛的色域范围
    sRGB色域是一个通用的标准色域,是由微软、惠普主导制定出来的标准色彩空间,意在让显示器、数位相机、扫描仪、投影仪等各种计算机外部设备与应用软件对于色彩有一个共通的语言。显示设备能够覆盖的sRGB范围越大,显示的颜色就更加丰富饱满。Adobe RGB是Adobe公司于1998年提出的实用性色彩空间,适合用来模拟印刷色,在印刷领域得到了广泛应用。

    image.png

    解决方案

    使用 pillow 的ImageCMS 类,获取图片的icc信息,如果存在 icc_profile, 一般情况下,该图片是以 adobe RGB编码的。此时,通过ImageCms进行编码转换即可。

    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

    相关文章

      网友评论

          本文标题:opencv及pil图片饱和度问题 (sRGB 与 adobe

          本文链接:https://www.haomeiwen.com/subject/lgjxfctx.html