我试图在OpenCV中读取和写入Adobe RGB色彩空间的jpegs。 OpenCV假定jpeg具有sRGB色彩空间,当显示或写入文件时,图像会失去一些颜色强度。我发现这种强度损失是由于我的previous question给出的答案的颜色空间差异。
无论如何我可以让OpenCV读取Adobe RGB色彩空间而不将其转换为sRGB吗?
一些信息对希望处理ICC和其他配置文件的人来说是有用的...
您可以使用安装在大多数Linux发行版上的ImageMagick查看映像中存在的配置文件,并且可用于macOS和Windows。在Windows上的终端或命令提示符下,运行:
magick identify -verbose frog.jpg | grep 'Profile-.*bytes'
Profile-icc: 578 bytes
这告诉你这个图像嵌入了一个578字节的ICC配置文件。
如果你在Windows上并且没有grep
,你可以同样使用以下内容,尽管你可能需要加倍百分号,或者用插入符号前缀(^
)或以某种方式逃避它:
magick identify -format "%[profiles]" frog.jpg
icc
您可以使用以下命令从图像中提取该配置文件:
magick frog.jpg frog.icc
并且,您将获得一个578字节的ICC配置文件:
ls -l *icc
-rw-r--r-- 1 mark staff 578 24 Apr 10:36 frog.icc
您可以使用file
命令检查配置文件是否正确:
file *icc
frog.icc: ColorSync color profile 2.1, type ADBE, RGB/XYZ-mntr device by ADBE, 560 bytes, 11-8-2000 19:51:59 "Adobe RGB (1998)"
您可以将该配置文件应用于其他文件,如下所示:
magick other.jpg -profile "icc:frog.icc" otherWithProfile.jpg
使用上述方法提取配置文件后,可以使用PIL / Pillow的ImageCMS Module将其应用于计划与OpenCV一起使用的图像。
为此,我认为你需要使用这些步骤或类似的东西,虽然我还没有测试过:
from PIL import Image, ImageCMS
import numpy as np
# Open frog with PIL/Pillow
im = Image.open('frog.jpg')
iccp = PIL.ImageCms.getOpenProfile("profile.icc")
rgbp = ImageCms.createProfile("sRGB")
icc2rgb = ImageCms.buildTransformFromOpenProfiles(rgbp, iccp, "RGB", "RGB")
result = ImageCms.applyTransform(im, icc2rgb)
然后,您应该能够将生成的图像转换为OpenCV可以使用的Numpy数组:
OpenCVim = np.array(result)
并记得然后用cv2.cvtColor()
从RGB排序转换为BGR。
而不是使用ImageMagick检测和提取ICC配置文件,您可以像这样使用PIL / Pillow:
from PIL import Image
im = Image.open('frog.jpg')
# Now look at "im.info"
{'jfif': 257,
'jfif_version': (1, 1),
'dpi': (72, 72),
'jfif_unit': 1,
'jfif_density': (72, 72),
'icc_profile': b'\x00\x00\x020ADBE\x02\x10\x00\x00mntrRGB XYZ \x07\xd0\x00\x08\x00\x0b\x00\x13\x003\x00;acspAPPL\x00\x00\x00\x00none\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xd6\x00\x01\x00\x00\x00\x00\xd3-ADBE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ncprt\x00\x00\x00\xfc\x00\x00\x002desc\x00\x00\x010\x00\x00\x00kwtpt\x00\x00\x01\x9c\x00\x00\x00\x14bkpt\x00\x00\x01\xb0\x00\x00\x00\x14rTRC\x00\x00\x01\xc4\x00\x00\x00\x0egTRC\x00\x00\x01\xd4\x00\x00\x00\x0ebTRC\x00\x00\x01\xe4\x00\x00\x00\x0erXYZ\x00\x00\x01\xf4\x00\x00\x00\x14gXYZ\x00\x00\x02\x08\x00\x00\x00\x14bXYZ\x00\x00\x02\x1c\x00\x00\x00\x14text\x00\x00\x00\x00Copyright 2000 Adobe Systems Incorporated\x00\x00\x00desc\x00\x00\x00\x00\x00\x00\x00\x11Adobe RGB (1998)\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00XYZ \x00\x00\x00\x00\x00\x00\xf3Q\x00\x01\x00\x00\x00\x01\x16\xccXYZ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00XYZ \x00\x00\x00\x00\x00\x00\x9c\x18\x00\x00O\xa5\x00\x00\x04\xfcXYZ \x00\x00\x00\x00\x00\x004\x8d\x00\x00\xa0,\x00\x00\x0f\x95XYZ \x00\x00\x00\x00\x00\x00&1\x00\x00\x10/\x00\x00\xbe\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}
这是frog.jpg
图像:
关键字:Python,ImageMagick,图像,图像处理,配置文件,ICC配置文件,提取,插入,应用,转换,PIL,枕头,OpenCV,CMS,pyCMS。