现在我有一个关于智能手机摄像头色彩管理的项目,并且我无法在 pycms 中转换我自制的 icc 配置文件。它总是会引发错误
'PIL.ImageCms.PyCMSError: cannot build transform '
。现在,我很困惑,当我使用标准的icc配置文件时,转换总是成功的。
因此,我认为要么是我自制的icc Profile有问题,要么是代码有问题。所以我用 3 种方法为智能手机相机制作了 ICC 配置文件:
第一种方法:使用软件“色彩检查相机校准” 首先,我采样了来自不同智能手机的所有图片。然后我将“Tiff”中的“jpeg”图片转换并加载到软件中。最后,我得到了我的 icc 个人资料。
第二种使用软件“I1 Profiler”的方法和第三种方法使用“BaicColor input 6”也与第一种方法类似。
但是所有的 Icc 配置文件都无法在我的代码中进行转换。现在我不知道我的代码或 ICC 配置文件中的问题出在哪里。你能告诉我我的问题出在哪里吗?在我的 ICC 配置文件上还是在我的代码上?以下是我在Python3.7中的代码,在超链接中您还可以找到我的icc。在此处输入链接描述
import os
from PIL.ImageCms import *
# initialization the current working directory into a dictionary
def init():
current_dir = os.path.abspath(os.path.dirname(__file__))
return {
'honor6x': os.path.join(current_dir, 'icc_profile', 'honor6x.icc'),
'honor7i': os.path.join(current_dir, 'icc_profile', 'honor7i.icc'),
'huawei-p30pro': os.path.join(current_dir, 'icc_profile', 'huawei-p30pro.icc'),
'iphone6s': os.path.join(current_dir, 'icc_profile', 'iphone6s.icc'),
'iphone8': os.path.join(current_dir, 'icc_profile', 'iphone8.icc'),
'iphonex': os.path.join(current_dir, 'icc_profile', 'iphonex.icc'),
'samsung-s8': os.path.join(current_dir, 'icc_profile', 'samsung-s8.icc'),
'sony-G8341': os.path.join(current_dir, 'icc_profile', 'sony-G8341.icc')
}
# the main function to carry out the icc-profile retrieval with the input of the smartphone type,
# and correction the input photos through the icc-profile
def main():
#my_phone = input('give me a type of smartphone:')
#icc = get_icc(my_phone)
#if not icc:
# return
#print(icc)
inputProfile = ImageCmsProfile(os.path.join('icc_profile', 'sRGB_IEC61966-2-1_no_black_scaling(v4).icc'))
outputProfile = ImageCmsProfile(os.path.join('icc_profile', 'sRGB2014(v2.0.0).icc'))
print(outputProfile)
# input the new photo and transform it to the corrected photo through the icc-Profile
my_photo = input('give me a photo of the smartphone:')
im = Image.open(my_photo)
im_converted = profileToProfile(im, inputProfile, outputProfile, renderingIntent=1)
# after the transformation of the input photo, save the corrected photos as a target photo
im_converted.save (f"{my_photo}_corrected.jpeg")
# search the input type smartphone with the relevant icc profile, if the input type in the dict and get its icc
# if not, print it
def get_icc(my_phone):
if my_phone not in icc_dict:
print(f'{my_phone} is not validated!')
return icc_dict.get(my_phone)
if __name__ == '__main__':
icc_dict = init()
main()
我也有同样的问题。有更新吗?