本文目录导读:

- 方法一:使用 Python + Pillow 库
- 方法二:使用 OpenCV
- 方法三:使用命令行工具 (ImageMagick)
- 方法四:批量调整颜色属性(HSL/HSV)
- 方法五:支持CUBE格式的LUT文件
- 安装依赖
- 批量处理脚本示例(命令行)
我来详细介绍批量调整图片色彩查找表(LUT)的几种方法:
使用 Python + Pillow 库
from PIL import Image
import os
import numpy as np
def apply_lut_to_image(image_path, lut_path, output_path):
"""应用LUT到单张图片"""
img = Image.open(image_path)
# 加载自定义LUT
with open(lut_path, 'r') as f:
lut_data = f.read()
# 这里需要根据LUT格式解析
# 示例:简单的3D LUT (64x64x64)
img = img.point(lambda p: p * 0.5) # 示例调整
img.save(output_path)
def batch_process_lut(input_folder, lut_path, output_folder):
"""批量处理文件夹中的所有图片"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
supported_formats = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff')
for filename in os.listdir(input_folder):
if filename.lower().endswith(supported_formats):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
apply_lut_to_image(input_path, lut_path, output_path)
print(f"已处理: {filename}")
# 使用示例
batch_process_lut(
input_folder='./input_images',
lut_path='./lut_files/my_lut.cube',
output_folder='./output_images'
)
使用 OpenCV
import cv2
import numpy as np
import os
def create_lut_from_curve(curve):
"""从曲线数据创建LUT"""
lut = np.zeros((256,), dtype=np.uint8)
for i in range(256):
# 示例:调整对比度
lut[i] = np.clip(i * curve, 0, 255)
return lut
def apply_lut_opencv(image_path, lut_data, output_path):
"""使用OpenCV应用LUT"""
img = cv2.imread(image_path)
# 应用LUT到每个通道
result = cv2.LUT(img, lut_data)
cv2.imwrite(output_path, result)
def batch_process_opencv(input_folder, output_folder):
"""批量处理"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 创建曲线LUT示例
lut_r = create_lut_from_curve(1.2) # 红色通道增强
lut_g = create_lut_from_curve(1.0) # 绿色通道不变
lut_b = create_lut_from_curve(0.8) # 蓝色通道减弱
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
apply_lut_opencv(input_path, np.stack([lut_b, lut_g, lut_r], axis=1), output_path)
print(f"已处理: {filename}")
batch_process_opencv('./input', './output')
使用命令行工具 (ImageMagick)
#!/bin/bash
# batch_lut_adjust.sh
# 创建输出目录
mkdir -p ./output
# 批量处理所有JPG图片
for img in ./input/*.jpg; do
filename=$(basename "$img")
# 使用ImageMagick的hald-clut功能
convert "$img" hald-clut:./lut.cube -fx "p{clamp(u*v*w)}" "./output/$filename"
echo "已处理: $filename"
done
# 或者使用更简单的方法
mogrify -path ./output -hald-clut ./lut.cube ./input/*.jpg
批量调整颜色属性(HSL/HSV)
import cv2
import numpy as np
import os
def batch_adjust_colors(input_folder, output_folder,
hue_shift=0, saturation_scale=1.0, lightness_scale=1.0):
"""批量调整HSL颜色属性"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
img = cv2.imread(os.path.join(input_folder, filename))
# 转换为HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 调整各通道
hsv[:,:,0] = (hsv[:,:,0] + hue_shift) % 180
hsv[:,:,1] = np.clip(hsv[:,:,1] * saturation_scale, 0, 255)
hsv[:,:,2] = np.clip(hsv[:,:,2] * lightness_scale, 0, 255)
# 转换回BGR
result = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite(os.path.join(output_folder, filename), result)
print(f"已处理: {filename}")
# 使用示例:每个通道独立调整
batch_adjust_colors(
input_folder='./input',
output_folder='./output',
hue_shift=10, # 色相偏移
saturation_scale=1.2, # 饱和度增强
lightness_scale=0.9 # 亮度稍微降低
)
支持CUBE格式的LUT文件
import numpy as np
import cv2
import os
import re
def load_cube_lut(filename, size=33):
"""加载CUBE格式的LUT文件"""
lut = np.zeros((size, size, size, 3), dtype=np.float32)
with open(filename, 'r') as f:
lines = f.readlines()
data_lines = [line for line in lines if not line.startswith('#') and line.strip()]
rgb_pattern = re.compile(r'^-?\d+\.?\d*\s+-?\d+\.?\d*\s+-?\d+\.?\d*')
i = 0
for line in data_lines:
if rgb_pattern.match(line):
r, g, b = map(float, line.strip().split()[:3])
r_idx = (i // (size * size)) % size
g_idx = (i // size) % size
b_idx = i % size
lut[r_idx, g_idx, b_idx] = [r, g, b]
i += 1
if i >= size**3:
break
return lut
def apply_cube_lut(img, lut, size=33):
"""应用CUBE LUT到图像"""
img_float = img.astype(np.float32) / 255.0
# 计算LUT索引
scale = (size - 1)
r_idx = (img_float[..., 2] * scale).astype(np.int32)
g_idx = (img_float[..., 1] * scale).astype(np.int32)
b_idx = (img_float[..., 0] * scale).astype(np.int32)
# 应用LUT
result = np.zeros_like(img_float)
for c in range(3):
result[..., c] = lut[r_idx, g_idx, b_idx, c]
return (result * 255).astype(np.uint8)
def batch_process_cube_lut(input_folder, lut_path, output_folder):
"""批量处理CUBE格式的LUT"""
lut = load_cube_lut(lut_path)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
img = cv2.imread(os.path.join(input_folder, filename))
result = apply_cube_lut(img, lut)
cv2.imwrite(os.path.join(output_folder, filename), result)
print(f"已处理: {filename}")
# 使用示例
batch_process_cube_lut('./input', './color_lut.cube', './output')
安装依赖
pip install pillow opencv-python numpy # 或使用conda conda install pillow opencv numpy
批量处理脚本示例(命令行)
# batch_lut_converter.py - 完整命令行工具
import argparse
import cv2
import numpy as np
import os
from glob import glob
def main():
parser = argparse.ArgumentParser(description='批量调整图片色彩查找表')
parser.add_argument('--input', '-i', required=True, help='输入文件夹路径')
parser.add_argument('--output', '-o', required=True, help='输出文件夹路径')
parser.add_argument('--lut', '-l', help='LUT文件路径')
parser.add_argument('--hue', type=int, default=0, help='色相偏移')
parser.add_argument('--saturation', type=float, default=1.0, help='饱和度倍数')
parser.add_argument('--brightness', type=float, default=1.0, help='亮度倍数')
args = parser.parse_args()
# 这里添加处理逻辑
# ...
if __name__ == '__main__':
main()
选择适合你需求的方法:
- 简单调整:使用方法四的HSL调整
- 专业LUT:使用方法五的CUBE格式支持
- 批量处理:推荐使用Python脚本自动化
- 图像编辑软件:支持批处理的功能也可考虑
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播