脚本如何批量调整图片曝光度

wen 实用脚本 5

本文目录导读:

脚本如何批量调整图片曝光度

  1. 方法一:使用Python + PIL/Pillow
  2. 方法二:使用OpenCV(更精确的控制)
  3. 方法三:使用ImageMagick命令行(快速批量处理)
  4. 方法四:使用Python + rawpy(处理RAW文件)
  5. 方法五:图形界面工具
  6. 智能曝光调整脚本
  7. 安装依赖
  8. 使用建议

我来介绍几种批量调整图片曝光度的方法,包括使用Python脚本、命令行工具和图像处理软件。

使用Python + PIL/Pillow

from PIL import Image, ImageEnhance
import os
from pathlib import Path
def batch_adjust_exposure(input_dir, output_dir, factor=1.2):
    """
    批量调整图片曝光度
    Args:
        input_dir: 输入图片目录
        output_dir: 输出图片目录
        factor: 曝光度调整因子 (>1增加曝光, <1减少曝光)
    """
    # 创建输出目录
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    # 支持的图片格式
    supported_formats = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff'}
    for filename in os.listdir(input_dir):
        if Path(filename).suffix.lower() in supported_formats:
            try:
                # 打开图片
                img_path = os.path.join(input_dir, filename)
                img = Image.open(img_path)
                # 调整曝光度(亮度)
                enhancer = ImageEnhance.Brightness(img)
                img_adjusted = enhancer.enhance(factor)
                # 保存图片
                output_path = os.path.join(output_dir, filename)
                img_adjusted.save(output_path)
                print(f"✅ 已处理: {filename}")
            except Exception as e:
                print(f"❌ 处理 {filename} 时出错: {e}")
# 使用示例
batch_adjust_exposure(
    input_dir="./input_images",
    output_dir="./output_images",
    factor=1.3  # 增加30%曝光度
)

使用OpenCV(更精确的控制)

import cv2
import numpy as np
import os
from pathlib import Path
def batch_adjust_exposure_opencv(input_dir, output_dir, beta=30):
    """
    使用OpenCV批量调整曝光度
    Args:
        input_dir: 输入目录
        output_dir: 输出目录
        beta: 亮度调整值 (-255 到 255)
    """
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            try:
                # 读取图片
                img_path = os.path.join(input_dir, filename)
                img = cv2.imread(img_path)
                # 调整亮度和对比度
                # alpha: 对比度 (1.0 表示不变)
                # beta: 亮度调整值
                adjusted = cv2.convertScaleAbs(img, alpha=1.0, beta=beta)
                # 保存图片
                output_path = os.path.join(output_dir, filename)
                cv2.imwrite(output_path, adjusted)
                print(f"✅ 已处理: {filename}")
            except Exception as e:
                print(f"❌ 处理 {filename} 时出错: {e}")
# 使用示例
batch_adjust_exposure_opencv(
    input_dir="./input_images",
    output_dir="./output_images",
    beta=50  # 增加亮度
)

使用ImageMagick命令行(快速批量处理)

# 安装ImageMagick后使用
# 批量增加30%亮度
for img in ./input_images/*.jpg; do
    convert "$img" -brightness-contrast 30x0 "./output_images/$(basename $img)"
done
# 或使用mogrify直接批量处理(注意会覆盖原图)
mogrify -path ./output_images -brightness-contrast 30x0 ./input_images/*.jpg

使用Python + rawpy(处理RAW文件)

import rawpy
import imageio
import os
from pathlib import Path
def batch_adjust_raw_exposure(input_dir, output_dir, exposure_compensation=1.0):
    """
    批量调整RAW格式图片曝光度
    Args:
        input_dir: 输入目录(含RAW文件)
        output_dir: 输出目录
        exposure_compensation: 曝光补偿值
    """
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    raw_extensions = {'.cr2', '.nef', '.arw', '.dng', '.orf', '.raf'}
    for filename in os.listdir(input_dir):
        if Path(filename).suffix.lower() in raw_extensions:
            try:
                # 读取RAW文件
                raw_path = os.path.join(input_dir, filename)
                with rawpy.imread(raw_path) as raw:
                    # 调整曝光
                    rgb = raw.postprocess(
                        exposure=exposure_compensation,
                        use_camera_wb=True,
                        half_size=False
                    )
                # 保存为JPEG
                output_path = os.path.join(output_dir, 
                    Path(filename).stem + '.jpg')
                imageio.imwrite(output_path, rgb)
                print(f"✅ 已处理: {filename}")
            except Exception as e:
                print(f"❌ 处理 {filename} 时出错: {e}")
# 使用示例
batch_adjust_raw_exposure(
    input_dir="./raw_images",
    output_dir="./output_jpg",
    exposure_compensation=1.5  # 增加1.5档曝光
)

图形界面工具

如果你更喜欢用图形界面,也可以使用这些工具:

Adobe Lightroom

  • 选择所有照片
  • 按 Ctrl+A (Windows) 或 Cmd+A (Mac)
  • 调整曝光度滑块
  • 选择"同步设置"

XnConvert(免费)

  • 添加图片
  • 添加"调整亮度"动作
  • 设置参数
  • 选择输出格式和路径
  • 转换

FastStone Image Viewer(免费)

  • 批量转换功能
  • 高级选项中的曝光调整

智能曝光调整脚本

import cv2
import numpy as np
from PIL import Image, ImageStat
import os
def auto_adjust_exposure(image):
    """
    自动调整图片到最佳曝光度
    """
    # 转换为灰度图分析亮度
    if isinstance(image, np.ndarray):
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    else:
        gray = image.convert('L')
        image = np.array(image)
        gray = np.array(gray)
    # 计算平均亮度
    mean_brightness = np.mean(gray)
    # 目标亮度(中灰度)
    target_brightness = 128
    # 计算调整因子
    if mean_brightness > 0:
        factor = target_brightness / mean_brightness
        # 限制调整范围
        factor = np.clip(factor, 0.5, 2.0)
    else:
        factor = 1.0
    # 调整曝光
    adjusted = cv2.convertScaleAbs(image, alpha=factor, beta=0)
    return adjusted, factor
def batch_auto_adjust(input_dir, output_dir):
    """
    批量自动曝光调整
    """
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            # 读取图片
            img_path = os.path.join(input_dir, filename)
            img = cv2.imread(img_path)
            if img is not None:
                # 自动调整曝光
                adjusted_img, factor = auto_adjust_exposure(img)
                # 保存结果
                output_path = os.path.join(output_dir, filename)
                cv2.imwrite(output_path, adjusted_img)
                print(f"✅ {filename}: 调整因子 {factor:.2f}")
# 使用示例
batch_auto_adjust("./input_images", "./auto_adjusted")

安装依赖

# 基础处理
pip install Pillow opencv-python
# 处理RAW文件
pip install rawpy imageio
# 系统工具
# Linux: sudo apt-get install imagemagick
# macOS: brew install imagemagick
# Windows: 下载安装 ImageMagick

使用建议

  1. 曝光因子参考值

    • 5-0.8:降低曝光(适合过曝照片)
    • 8-1.2:微调
    • 2-2.0:增加曝光(适合欠曝照片)
  2. 注意事项

    • 过度调整会导致细节丢失
    • 建议先在小批量上测试效果
    • 保存原始照片备份
    • JPEG格式调整会损失画质,建议用TIFF或PNG
  3. 批量处理时

    • 使用统一参数可保证一致性
    • 自动调整更适合差异较大的照片
    • 考虑写一个配置文件来存储不同场景的参数

选择哪种方法取决于你的具体需求、技术水平和使用环境,对于简单的批量处理,Python脚本最灵活;对于大量文件,ImageMagick命令最快;对于RAW文件,rawpy方案最专业。

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