Py学习  »  Python

colour,一个巨有趣的 Python 库!

python • 4 月前 • 253 次点击  


大家好,今天为大家分享一个巨有趣的 Python 库 - colour。

Github地址:https://github.com/colour-science/colour


Python colour库是一个专注于颜色科学计算的开源库,为研究者、开发者和设计师提供了全面的色彩处理解决方案。该库实现了众多国际标准化组织(ISO)、国际照明委员会(CIE)和色彩工程师协会(SMPTE)定义的色彩标准和算法。colour库的设计理念是提供一套准确、可靠且易于使用的API,用于处理各种颜色转换、操作和分析任务。无论是进行科学研究、图像处理、视觉效果制作还是产品设计,colour库都能提供专业级别的色彩管理功能。

安装

colour库可以通过Python的包管理工具pip进行安装。由于其功能全面,它依赖于多个科学计算库,如NumPy和SciPy:

pip install colour-science

安装完成后,可以通过以下代码验证安装是否成功:

import colour
print(colour.__version__)

如果安装成功,上述代码将输出colour库的版本号。

注意:colour库的导入名称是colour-science,但在Python中导入时使用import colour

特性

  1. 全面的色彩空间支持:支持超过30种色彩空间,包括RGB、XYZ、CIE Lab、HSL、HSV、CMYK等。
  2. 颜色模型转换:提供各种颜色模型之间的准确转换。
  3. 色度图生成:支持生成各种色度图和色彩空间可视化。
  4. 色彩适应算法:实现多种色彩适应模型,如Bradford、CAT02、Von Kries等。
  5. 颜色外观模型:支持CIECAM02和CAM16等颜色外观模型。
  6. 照明体系:包括各种标准光源和照明体系的光谱数据。
  7. 色彩差异计算:实现多种色差计算方法,如CIEDE2000、CMC等。
  8. 色温转换:支持相关色温(CCT)和色坐标之间的转换。
  9. 谱域转换:处理光谱数据和颜色之间的转换。
  10. 色盲模拟:提供色盲视觉模拟功能。

基本功能

1. 颜色空间转换

在处理颜色数据时,不同的应用场景可能需要使用不同的颜色空间。colour库提供了丰富的色彩空间转换功能,可以在各种颜色表示方式之间进行精确转换。这在需要跨平台、跨设备进行颜色一致性处理时特别有用,如印刷设计、数字成像或色彩管理系统开发。

import colour
import numpy as np

# RGB到XYZ的转换
RGB = np.array([0.456205190.030810710.04091952])
# 使用sRGB颜色空间
XYZ = colour.sRGB_to_XYZ(RGB)
print(f"RGB值 {RGB} 转换为XYZ值: {XYZ}")

# XYZ到CIE Lab的转换
Lab = colour.XYZ_to_Lab(XYZ)
print(f"XYZ值 {XYZ} 转换为Lab值: {Lab}")

# RGB到HSV的转换
HSV = colour.RGB_to_HSV(RGB)
print(f"RGB值 {RGB} 转换为HSV值: {HSV}")

# 色温到XYZ的转换
CCT = 6500  # 色温,单位:K
XYZ_from_CCT = colour.CCT_to_XYZ(CCT)
print(f"色温 {CCT}K 对应的XYZ值: {XYZ_from_CCT}")

2. 颜色差异计算

在产品设计、质量控制和色彩匹配中,常常需要量化两种颜色之间的差异。colour库实现了多种国际标准的色差计算方法,使得开发者可以根据具体应用精确地测量颜色差异。这对于制造业的颜色质量控制、数字图像处理或视觉艺术创作都非常重要。

import colour
import numpy as np

# 定义两个Lab颜色
Lab_1 = np.array([50.002.50-14.00])
Lab_2 = np.array([54.00-3.50-16.00])

# 计算CIEDE2000色差
delta_E_00 = colour.delta_E(Lab_1, Lab_2, method='CIEDE2000')
print(f"CIEDE2000色差: {delta_E_00}")

# 计算CIE 1976色差
delta_E_76 = colour.delta_E(Lab_1, Lab_2, method='CIE 1976')
print(f"CIE 1976色差: {delta_E_76}")

# 计算CMC色差
delta_E_CMC = colour.delta_E(Lab_1, Lab_2, method='CMC')
print(f"CMC色差: {delta_E_CMC}")

3. 色度图生成

在色彩科学研究和教育中,色度图是理解颜色分布和色彩空间特性的重要工具。colour库提供了强大的色度图生成功能,可用于可视化色彩空间、分析色彩分布或研究色温变化。这在科学研究、教育演示或产品开发过程中都能提供宝贵的视觉参考。

import colour
import matplotlib.pyplot as plt
from colour.plotting import *

# 设置绘图样式
colour_style()

# 绘制CIE 1931 xy色度图
plot_chromaticity_diagram_CIE1931(standalone=False)

# 添加色温轨迹线
plot_planckian_locus(standalone=False)

# 在色度图上标记几个点
xy = np.array([
    [0.30.3],
    [0.40.5],
    [0.20.1]
])
plot_multi_colour_swatches(
    colour.xy_to_XYZ(xy), 
    xy, 
    standalone=False
)

# 显示图形
plt.title('CIE 1931 色度图与色温轨迹')
plt.grid(True)
plt.show()

高级功能

1. 色彩适应和外观模型

人类视觉系统具有适应不同光源条件的能力,这被称为色彩适应。colour库实现了多种色彩适应模型和颜色外观模型,使开发者能够模拟人类视觉系统在不同照明条件下的色彩感知。这在跨光源色彩匹配、摄影图像处理或虚拟现实视觉效果设计中非常有价值。

import colour
import numpy as np

# 定义一个颜色的XYZ值
XYZ = np.array([0.206540080.121972250.05136952])

# 定义光源的白点
source_white = np.array([0.950455931.000000001.08905775])  # D65
target_white = np.array([1.098466071.000000000.35582280])  # A

# 使用CAT02色彩适应模型进行转换
XYZ_adapted = colour.chromatic_adaptation(
    XYZ,
    source_white,
    target_white,
    method='CAT02'
)
print(f"色彩适应后的XYZ值: {XYZ_adapted}")

# 使用CIECAM02色彩外观模型
XYZ = np.array([0.10.20.3])
XYZ_w = np.array([0.950455931.000000001.08905775])
L_A = 100   # 环境亮度
Y_b = 20   # 背景亮度

# 计算CIECAM02颜色外观参数
specification = colour.XYZ_to_CIECAM02(
    XYZ, 
    XYZ_w, 
    L_A, 
    Y_b
)
print(f"CIECAM02参数: {specification}")

2. 光谱处理与分析

许多高级色彩应用需要处理光谱数据而非简单的三刺激值。colour库提供了全面的光谱处理功能,包括光谱到颜色的转换、光谱插值、光谱采样等。这在光学成像、照明设计、材料外观模拟等领域有着广泛应用。

import colour
import numpy as np
import matplotlib.pyplot as plt

# 创建一个简单的光谱数据
wavelengths = np.arange(40070110)  # 400-700nm,步长10nm
values = np.random.random(31)  # 随机生成31个点的光谱数据

# 创建光谱对象
spd = colour.SpectralDistribution(values, wavelengths)

# 光谱插值
spd_interpolated = spd.interpolate(colour.SpectralShape(4007005))

# 计算光谱对应的XYZ值
illuminant = colour.SDS_ILLUMINANTS['D65']
XYZ = colour.sd_to_XYZ(spd, illuminant)
print(f"光谱对应的XYZ值: {XYZ}")

# 绘制光谱曲线
plt.figure(figsize=(106))
plt.plot(spd.wavelengths, spd.values, 'r-', label='原始光谱')
plt.plot(spd_interpolated.wavelengths, spd_interpolated.values, 'b--', label='插值后光谱')
plt.xlabel('波长 (nm)')
plt.ylabel('光谱功率分布')
plt.title('光谱数据示例')
plt.legend()
plt.grid(True)
plt.show()

3. 色盲模拟

理解色盲用户的视觉体验对于开发无障碍的视觉设计至关重要。colour库提供了色盲模拟功能,可以转换普通RGB图像以模拟不同类型色盲患者的视觉感知。这对于设计师、开发者创建包容性设计和评估颜色方案的可访问性非常重要。

import colour
import numpy as np
from colour.plotting import *
import matplotlib.pyplot as plt

# 创建一个RGB测试图像(这里用简单的色彩方块)
RGB = np.array([
    [1.00.00.0],  # 红色
    [0.01.00.0],  # 绿色
    [0.00.01.0],  # 蓝色
    [1.01.00.0],  # 黄色
    [0.01.01.0],  # 青色
    [1.00.01.0]   # 品红色
])

# 转换为色盲视觉下的颜色
# 1. 转换为二色型色盲(绿色色盲)
deuteranopia = colour.anomalous_trichromacy_cmfs_Machado2009('deuteranopia')(RGB)

# 2. 转换为三色型色盲(红色色盲)
protanopia = colour.anomalous_trichromacy_cmfs_Machado2009('protanopia')(RGB)

# 3. 转换为蓝色色盲
tritanopia = colour.anomalous_trichromacy_cmfs_Machado2009('tritanopia')(RGB)

# 显示结果
fig, axes = plt.subplots(41, figsize=(108))

swatches = [RGB, deuteranopia, protanopia, tritanopia]
titles = ['原始颜色''绿色色盲视觉''红色色盲视觉''蓝色色盲视觉']

for i, (swatch, title) in enumerate(zip(swatches, titles)):
    plot_multi_colour_swatches(
        colour_swatches=swatch,
        standalone=False,
        axes=axes[i]
    )
    axes[i].set_title(title)
    axes[i].grid(False)

plt.tight_layout()
plt.show()

实际应用场景

1. 图像处理与增强

在数字图像处理领域,colour库可以用于高质量的色彩空间转换和色彩校准,帮助开发者实现专业级别的图像处理工作流程。以下示例展示了如何使用colour库对图像进行色彩处理。

import colour
import numpy as np
from colour.plotting import *
import matplotlib.pyplot as plt
from PIL import Image
import os

# 加载示例图像(这里假设有一个名为'image.jpg'的文件)
if os.path.exists('image.jpg'):
    image = np.array(Image.open('image.jpg').convert('RGB')) / 255.0
else:
    # 如果没有图像文件,创建一个示例图像
    image = np.zeros((1001003))
    # 创建一个渐变
    for i in range(100):
        for j in range(100):
            image[i, j, 0] = i / 100.0
            image[i, j, 1] = j / 100.0
            image[i, j, 2] = 0.5

# 色彩空间转换
# 1. 将图像从sRGB转换到XYZ
XYZ = colour.sRGB_to_XYZ(image)

# 2. 将XYZ转换到Lab
Lab = colour.XYZ_to_Lab(XYZ)

# 3. 提升图像对比度(在Lab空间中操作L通道)
Lab_enhanced = Lab.copy()
# 增加L通道的对比度
L_min, L_max = Lab[:,:,0].min(), Lab[:,:,0].max()
Lab_enhanced[:,:,0] = (Lab[:,:,0] - L_min) / (L_max - L_min) * 100

# 4. 将增强后的Lab转回XYZ
XYZ_enhanced = colour.Lab_to_XYZ(Lab_enhanced)

# 5. 将XYZ转回sRGB
RGB_enhanced = colour.XYZ_to_sRGB(XYZ_enhanced)

# 修正值范围,确保在[0,1]之间
RGB_enhanced = np.clip(RGB_enhanced, 01)

# 显示原始图像和增强后的图像
fig, (ax1, ax2) = plt.subplots(12, figsize=(126))
ax1.imshow(image)
ax1.set_title('原始图像')
ax1.axis('off')

ax2.imshow(RGB_enhanced)
ax2.set_title('增强后的图像')
ax2.axis('off')

plt.tight_layout()
plt.show()

2. 色彩设计与评估

在产品设计和品牌标识开发中,合理的色彩选择和评估至关重要。colour库可以帮助设计师创建协调的配色方案,并评估不同色彩组合的视觉效果和可访问性。

import colour
import numpy as np
import matplotlib.pyplot as plt
from colour.plotting import *

# 创建一个配色方案
colours = np.array([
    [0.750.250.20],  # 主色
    [0.200.500.75],  # 次色
    [0.900.800.20],  # 强调色
    [0.500.500.50],  # 中性色
    [0.200.200.20]   # 暗色
])

# 显示配色方案
plot_multi_colour_swatches(
    colour_swatches=colours,
    standalone=True
)

# 评估配色方案的对比度
# 计算主色与其他颜色的CIEDE2000色差
main_colour = colour.sRGB_to_Lab(colours[0])
contrast_values = []

for i in range(1, len(colours)):
    comp_colour = colour.sRGB_to_Lab(colours[i])
    delta_E = colour.delta_E(main_colour, comp_colour, method='CIEDE2000')
    contrast_values.append(delta_E)
    print(f"主色与颜色{i+1}的CIEDE2000色差: {delta_E}")

# 评估可访问性 - 模拟色盲视觉下的配色方案
deuteranopia = colour.anomalous_trichromacy_cmfs_Machado2009('deuteranopia')(colours)

fig, (ax1, ax2) = plt.subplots(21, figsize=(106))

plot_multi_colour_swatches(
    colour_swatches=colours,
    standalone=False,
    axes=ax1
)
ax1.set_title('原始配色方案')
ax1.grid(False)

plot_multi_colour_swatches(
    colour_swatches=deuteranopia,
    standalone=False,
    axes=ax2
)
ax2.set_title('绿色色盲视觉下的配色方案')
ax2.grid(False)

plt.tight_layout()
plt.show()

总结

Python colour库是一个功能全面、精确可靠的色彩科学计算工具库,为开发者和研究者提供了处理各种色彩问题的专业解决方案。通过本文介绍的基本功能、高级特性和实际应用场景,我们了解了colour库在颜色空间转换、色差计算、色度图生成、色彩适应、光谱处理和色盲模拟等方面的强大能力。无论是进行科学研究、开发专业图像处理应用,还是设计色彩管理系统,colour库都能够提供准确的算法和全面的工具支持。尽管该库的学习曲线相对陡峭,但其提供的专业级功能和对国际标准的全面实现,使其成为色彩科学领域的重要工具。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


我们还为大家准备了Python资料,感兴趣的小伙伴快来找我领取一起交流学习哦!

图片

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Beautiful Soup快速上手指南,从入门到精通(PDF下载)

Python基础学习常见的100个问题.pdf(附答案)

124个Python案例,完整源代码!

30 个Python爬虫的实战项目(附源码)

从入门到入魔,100个Python实战项目练习(附答案)!

80个Python数据分析必备实战案例.pdf(附代码),完全开放下载

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180231
 
253 次点击