本文目录导读:

- 方案一:调整图片的整体暗部(阴影)—— 使用 Python + Pillow
- 方案二:移除或替换图片的投影(白底图去阴影)—— 使用 Python + OpenCV
- 方案三:使用 Photoshop 动作批量处理(最专业、最灵活)
- 方案四:使用 ImageMagick(命令行专用,高速)
- 总结建议
这是一个比较具体的需求,调整“阴影”通常指的是调整图像的明暗对比、暗部细节或者添加/移除投影。
根据你想要的“批量调整”和具体的“阴影”含义,这里有几种不同的脚本方案供你参考。
调整图片的整体暗部(阴影)—— 使用 Python + Pillow
这是最常见的情况:你想要批量把图片的阴影部分(暗部)提亮,或者把暗部压得更暗,以改善对比度。
适用场景: 批量处理几百张曝光不足或对比度不佳的照片。
脚本 adjust_shadows.py:
import os
from PIL import Image, ImageEnhance, ImageOps
def batch_adjust_shadows(input_folder, output_folder, brightness_factor=1.2, contrast_factor=1.0):
"""
批量调整图片阴影(通过提升暗部亮度和平滑对比度)
:param input_folder: 输入文件夹路径
:param output_folder: 输出文件夹路径
:param brightness_factor: 亮度因子,>1 变亮,<1 变暗
:param contrast_factor: 对比度因子,>1 增强,<1 减弱
"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')):
img_path = os.path.join(input_folder, filename)
img = Image.open(img_path)
# 1. 调整对比度(这会影响阴影的深度)
enhancer_contrast = ImageEnhance.Contrast(img)
img = enhancer_contrast.enhance(contrast_factor)
# 2. 调整亮度(整体提亮,暗部会变得更明显)
enhancer_brightness = ImageEnhance.Brightness(img)
img = enhancer_brightness.enhance(brightness_factor)
# 保存
output_path = os.path.join(output_folder, filename)
img.save(output_path)
print(f"已处理: {filename}")
if __name__ == "__main__":
# 请修改为你的文件夹路径
input_folder = "C:/原始图片/"
output_folder = "C:/处理后的图片/"
# 推荐参数:亮度1.15,对比度0.9(提亮暗部同时不丢失细节)
batch_adjust_shadows(input_folder, output_folder, brightness_factor=1.15, contrast_factor=0.9)
注意: 简单的亮度/对比度调整无法区分“阴影区域”和“高光区域”,如果需要仅调整阴影区域,建议使用 Photoshop 动作 或 Lightroom,如果需要用 Python 实现,可以使用 OpenCV 结合 HSV 或 L 通道进行局部调整,但脚本会复杂很多。
移除或替换图片的投影(白底图去阴影)—— 使用 Python + OpenCV
如果你有一批 产品图,背景是白色但带有物体的投影(灰色区域),你想批量去掉它,或者替换成干净的背景,请用这个脚本。
适用场景: 电商产品图片,物体在白色背景上但有灰色阴影。
脚本 remove_shadow.py:
import cv2
import numpy as np
import os
def batch_remove_shadow(input_folder, output_folder):
"""
批量去除图片中的阴影(针对白底图)
"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
filepath = os.path.join(input_folder, filename)
img = cv2.imread(filepath)
# 1. 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 2. 使用高斯模糊找到背景的亮度层级
blurred = cv2.GaussianBlur(gray, (21, 21), 0)
# 3. 计算差值(原图 - 模糊背景)
diff = blurred - gray
# 4. 找到阴影区域(差值大于阈值的部分)
# 注意:如果阴影是偏暗的,diff 会是正数
_, shadow_mask = cv2.threshold(diff, 10, 255, cv2.THRESH_BINARY)
# 5. 对阴影区域进行修复(用周围的颜色填充)
# 这里使用 Inpaint 算法
result = cv2.inpaint(img, shadow_mask, 3, cv2.INPAINT_TELEA)
# 6. 保存结果
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, result)
print(f"已处理: {filename}")
if __name__ == "__main__":
batch_remove_shadow("C:/原始图片/", "C:/处理后/")
注意: 这个脚本对纯白背景 + 单一暗影效果最好,如果背景复杂或阴影颜色很淡,效果可能不理想。
使用 Photoshop 动作批量处理(最专业、最灵活)
如果你会使用 Photoshop,这是调整“阴影/高光”最强大的方法,它允许你只调整阴影区域而不影响高光。
步骤:
- 打开一张样图。
- 录制动作 (Window -> Actions -> Create New Action)。
- 执行调整: 点击
Image -> Adjustments -> Shadow/Highlight...- 调整 “Shadows” 的 Amount (数量)、Tonal Width (色调宽度) 和 Radius (半径)。
- 点确定。
- 保存图片: 按
Ctrl+S(覆盖原图) 或Shift+Ctrl+S(另存为新的文件夹)。 - 停止录制。
- 批量处理:
File -> Automate -> Batch...- Source: 选择你的原始图片文件夹。
- Destination: 选择输出文件夹。
- 选择你刚才录制的 Action。
- 点击 OK。
优点: 可以精确控制只调整阴影而不影响高光,且支持 PSD、TIFF 等复杂格式。
使用 ImageMagick(命令行专用,高速)
如果你是技术人员,且处理大量图片,ImageMagick 的命令行非常高效,以下命令可以提亮暗部:
# Windows (CMD) magick mogrify -path C:\output\ -brightness-contrast 10x-5 "C:\input\*.jpg" # Mac / Linux mogrify -path output/ -brightness-contrast 10x-5 "input/*.jpg"
-brightness-contrast 10x-5:亮度增加10%,对比度降低5%(暗部被提亮)。- 如果想像 Photoshop 那样精确调整阴影,可以使用
-channel或者-level,但相对复杂。
总结建议
| 你的需求 | 推荐方案 |
|---|---|
| 只想提亮暗部,不影响亮部 | Photoshop 动作 (方案三) 或 Lightroom 预设 |
| 处理几百张普通照片,整体调整 | Python + Pillow (方案一) |
| 去除白底图上的灰色投影 | Python + OpenCV (方案二) |
| 不写代码,用现成软件 | Photoshop 动作 或 FastStone Image Viewer (批量加亮) |
| Linux/服务器大批量处理 | ImageMagick (方案四) |
建议先备份原始图片! 任何批量处理都有风险,先用几张图片测试效果。