脚本如何批量调整图片对比度曲线

wen 实用脚本 15

本文目录导读:

脚本如何批量调整图片对比度曲线

  1. 方法1:使用Python + OpenCV
  2. 方法2:使用Pillow (PIL)
  3. 方法3:使用ImageMagick命令行
  4. 方法4:图形界面工具批量处理
  5. 常用对比度曲线预设
  6. 批量处理GUI工具推荐

方法1:使用Python + OpenCV

import cv2
import numpy as np
import os
from glob import glob
def adjust_contrast_curve(image, points):
    """
    使用曲线调整对比度
    points: [(x1,y1), (x2,y2), ...] 控制点坐标(0-255)
    """
    # 创建查找表
    x = [p[0] for p in points]
    y = [p[1] for p in points]
    # 插值生成完整的LUT
    lut = np.interp(np.arange(256), x, y).astype('uint8')
    # 应用查找表
    return cv2.LUT(image, lut)
def batch_adjust_contrast(input_folder, output_folder, curve_points):
    """
    批量调整对比度曲线
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    # 支持的图片格式
    extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tiff']
    image_files = []
    for ext in extensions:
        image_files.extend(glob(os.path.join(input_folder, ext)))
    for img_path in image_files:
        # 读取图片
        img = cv2.imread(img_path)
        if img is None:
            continue
        # 调整对比度(分别处理每个通道)
        adjusted = np.zeros_like(img)
        for i in range(3):
            adjusted[:,:,i] = adjust_contrast_curve(img[:,:,i], curve_points)
        # 保存结果
        filename = os.path.basename(img_path)
        output_path = os.path.join(output_folder, filename)
        cv2.imwrite(output_path, adjusted)
        print(f"处理完成: {filename}")
# 使用示例 - S曲线(增强对比度)
s_curve = [
    (0, 0),      # 保持黑点
    (64, 32),    # 压暗阴影
    (128, 128),  # 保持中间调
    (192, 224),  # 提亮高光
    (255, 255)   # 保持白点
]
# 调用函数
batch_adjust_contrast(
    input_folder="./input_images",
    output_folder="./output_images",
    curve_points=s_curve
)

方法2:使用Pillow (PIL)

from PIL import Image, ImageEnhance
import os
from pathlib import Path
def batch_adjust_contrast_curve_pillow(input_dir, output_dir, contrast_factor):
    """
    使用Pillow批量调整对比度
    """
    input_path = Path(input_dir)
    output_path = Path(output_dir)
    output_path.mkdir(exist_ok=True)
    # 获取所有图片
    image_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff']
    for img_file in input_path.iterdir():
        if img_file.suffix.lower() in image_extensions:
            # 打开图片
            img = Image.open(img_file)
            # 调整对比度
            enhancer = ImageEnhance.Contrast(img)
            enhanced = enhancer.enhance(contrast_factor)
            # 保存图片
            output_file = output_path / img_file.name
            enhanced.save(output_file)
            print(f"处理完成: {img_file.name}")
# 使用示例
batch_adjust_contrast_curve_pillow(
    input_dir="./images",
    output_dir="./enhanced_images",
    contrast_factor=1.5  # 1.0为原始,>1增强,<1减弱
)

方法3:使用ImageMagick命令行

#!/bin/bash
# 批量调整对比度曲线(使用convert命令)
input_folder="./input"
output_folder="./output"
# 创建输出文件夹
mkdir -p "$output_folder"
# 处理所有图片
for img in "$input_folder"/*.{jpg,jpeg,png,bmp,tiff}; do
    if [ -f "$img" ]; then
        filename=$(basename "$img")
        # 使用S曲线调整对比度
        convert "$img" -sigmoidal-contrast 10,50% "$output_folder/$filename"
        echo "处理完成: $filename"
    fi
done

方法4:图形界面工具批量处理

Lightroom

  1. 导入所有图片
  2. 编辑一张图片的对比度曲线
  3. 同步设置到其他图片

Photoshop + 动作

  1. 录制调整对比度曲线的动作
  2. 文件 → 自动 → 批处理
  3. 选择源文件夹和目标文件夹

常用对比度曲线预设

# 1. 强对比度S曲线
strong_s_curve = [
    (0, 0),
    (50, 20),
    (128, 128),
    (200, 235),
    (255, 255)
]
# 2. 柔和对比度
soft_contrast = [
    (0, 10),
    (64, 50),
    (128, 128),
    (192, 200),
    (255, 245)
]
# 3. 复古胶片效果
vintage_curve = [
    (0, 20),
    (64, 60),
    (128, 128),
    (192, 200),
    (255, 235)
]
# 4. 高对比度黑白效果
high_contrast_bw = [
    (0, 0),
    (50, 0),
    (100, 50),
    (155, 205),
    (205, 255),
    (255, 255)
]

批量处理GUI工具推荐

  1. FastStone Image Viewer - 支持批量调整曲线
  2. XnConvert - 免费的批量图片处理工具
  3. IrfanView - 支持批量处理插件
  4. BatchPhoto - 专业批量处理工具

选择最适合你需求的方法,Python适合需要精确控制的场景,GUI工具适合简单快速处理,Imagemagick适合命令行批量处理。

抱歉,评论功能暂时关闭!