用于检验的网站:颜色空间转换 - 在线工具 (buyaocha.com)
单个输入
import numpy as np
def rgb_to_xyz(rgb):
# 将RGB值转换为XYZ空间
rgb = np.array(rgb) / 255.0
rgb = np.where(rgb <= 0.04045, rgb / 12.92, ((rgb + 0.055) / 1.055) ** 2.4)
rgb = rgb.reshape((1, 1, 3))
m = np.array([[0.4124564, 0.3575761, 0.1804375],
[0.2126729, 0.7151522, 0.0721750],
[0.0193339, 0.1191920, 0.9503041]])
xyz = np.dot(rgb, m.T)
return xyz
def xyz_to_lab(xyz):
# 将XYZ值转换为Lab空间
xyz_ref = np.array([0.950456, 1.0, 1.088754])
xyz_ratio = xyz / xyz_ref
xyz_ratio = np.where(xyz_ratio > 0.008856, xyz_ratio ** (1/3), (903.3 * xyz_ratio + 16) / 116)
lab = np.zeros_like(xyz)
lab[..., 0] = np.clip(116 * xyz_ratio[..., 1] - 16, 0, 100)
lab[..., 1] = (xyz_ratio[..., 0] - xyz_ratio[..., 1]) * 500
lab[..., 2] = (xyz_ratio[..., 1] - xyz_ratio[..., 2]) * 200
return lab
def rgb_to_lab(rgb):
xyz = rgb_to_xyz(rgb)
lab = xyz_to_lab(xyz)
return lab
# 输入RGB颜色值
rgb_color = [255, 0, 0] # 例如,红色
# 转换为Lab颜色
lab_color = rgb_to_lab(rgb_color)
# 打印结果
print("RGB颜色:", rgb_color)
print("Lab颜色:", lab_color)
excel输入
excel大概长这样:
R_mean | G_mean | B_mean | Label |
221.5 | 172.75 | 190 | 0 |
220.75 | 164 | 193.75 | 0 |
244.75 | 179 | 195.75 | 0 |
246.75 | 172.75 | 196.75 | 0 |
245 | 148.5 | 172.25 | 0 |
import pandas as pd
import numpy as np
def rgb_to_lab(rgb):
# 将RGB值转换为Lab空间
rgb = np.array(rgb) / 255.0
rgb = np.where(rgb <= 0.04045, rgb / 12.92, ((rgb + 0.055) / 1.055) ** 2.4)
m = np.array([[0.4124564, 0.3575761, 0.1804375],
[0.2126729, 0.7151522, 0.0721750],
[0.0193339, 0.1191920, 0.9503041]])
xyz = np.dot(rgb, m.T)
xyz_ref = np.array([0.950456, 1.0, 1.088754])
xyz_ratio = xyz / xyz_ref
xyz_ratio = np.where(xyz_ratio > 0.008856, xyz_ratio ** (1 / 3), (903.3 * xyz_ratio + 16) / 116)
lab = np.zeros_like(xyz_ratio)
lab[..., 0] = np.clip(116 * xyz_ratio[..., 1] - 16, 0, 100)
lab[..., 1] = (xyz_ratio[..., 0] - xyz_ratio[..., 1]) * 500
lab[..., 2] = (xyz_ratio[..., 1] - xyz_ratio[..., 2]) * 200
return lab
# 读取Excel文件
excel_file_path = './exel/data_all.xlsx' # 输入地址
df = pd.read_excel(excel_file_path)
# 转换RGB到Lab,并添加到DataFrame
lab_values = df[['R_mean', 'G_mean', 'B_mean']].apply(lambda row: rgb_to_lab(row), axis=1)
df[['Lab_L', 'Lab_a', 'Lab_b']] = pd.DataFrame(lab_values.tolist(), index=df.index)
# 保存结果回Excel文件
output_excel_path = './exel/CIE Lab/data_all_lab.xlsx' # 输出地址
df.to_excel(output_excel_path, index=False)
print("转换完成,Lab值保存在", output_excel_path)