本文目录导读:

- 方法一:使用Python + PIL/Pillow
- 方法二:使用OpenCV(更精确的控制)
- 方法三:使用ImageMagick命令行(快速批量处理)
- 方法四:使用Python + rawpy(处理RAW文件)
- 方法五:图形界面工具
- 智能曝光调整脚本
- 安装依赖
- 使用建议
我来介绍几种批量调整图片曝光度的方法,包括使用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
使用建议
-
曝光因子参考值:
- 5-0.8:降低曝光(适合过曝照片)
- 8-1.2:微调
- 2-2.0:增加曝光(适合欠曝照片)
-
注意事项:
- 过度调整会导致细节丢失
- 建议先在小批量上测试效果
- 保存原始照片备份
- JPEG格式调整会损失画质,建议用TIFF或PNG
-
批量处理时:
- 使用统一参数可保证一致性
- 自动调整更适合差异较大的照片
- 考虑写一个配置文件来存储不同场景的参数
选择哪种方法取决于你的具体需求、技术水平和使用环境,对于简单的批量处理,Python脚本最灵活;对于大量文件,ImageMagick命令最快;对于RAW文件,rawpy方案最专业。