脚本如何批量调整图片色彩直方图

wen 实用脚本 24

本文目录导读:

脚本如何批量调整图片色彩直方图

  1. 方法一:使用 Python + Pillow 库
  2. 方法二:使用 OpenCV + 自适应直方图均衡
  3. 方法三:自定义直方图匹配
  4. 方法四:使用 ImageMagick 命令行批量处理
  5. 方法五:使用 Photoshop 动作(人工辅助)
  6. 建议使用场景

使用 Python + Pillow 库

from PIL import Image, ImageOps
import os
import glob
def batch_equalize_histogram(input_folder, output_folder):
    """批量直方图均衡化"""
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)
    # 获取所有图片文件
    image_files = glob.glob(os.path.join(input_folder, "*.[jp][pn][g]"))
    image_files += glob.glob(os.path.join(input_folder, "*.png"))
    for img_path in image_files:
        # 打开图片
        img = Image.open(img_path)
        # 直方图均衡化
        if img.mode == 'RGB':
            # RGB图片需要分别处理每个通道
            img_equalized = ImageOps.equalize(img)
        else:
            # 灰度图片直接处理
            img_equalized = ImageOps.equalize(img)
        # 保存结果
        filename = os.path.basename(img_path)
        output_path = os.path.join(output_folder, f"equalized_{filename}")
        img_equalized.save(output_path)
        print(f"处理完成: {filename}")
# 使用示例
batch_equalize_histogram("input_images", "output_images")

使用 OpenCV + 自适应直方图均衡

import cv2
import numpy as np
import os
import glob
def batch_clahe_equalization(input_folder, output_folder, clip_limit=2.0, grid_size=(8,8)):
    """使用CLAHE(对比度受限自适应直方图均衡)批量处理"""
    os.makedirs(output_folder, exist_ok=True)
    # 创建CLAHE对象
    clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=grid_size)
    # 获取所有图片
    image_files = glob.glob(os.path.join(input_folder, "*.[jp][pn][g]"))
    image_files += glob.glob(os.path.join(input_folder, "*.png"))
    for img_path in image_files:
        # 读取图片
        img = cv2.imread(img_path)
        # 转换到LAB颜色空间
        lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
        l, a, b = cv2.split(lab)
        # 对L通道应用CLAHE
        l_equalized = clahe.apply(l)
        # 合并通道
        lab_equalized = cv2.merge([l_equalized, a, b])
        img_equalized = cv2.cvtColor(lab_equalized, cv2.COLOR_LAB2BGR)
        # 保存结果
        filename = os.path.basename(img_path)
        output_path = os.path.join(output_folder, f"clahe_{filename}")
        cv2.imwrite(output_path, img_equalized)
        print(f"处理完成: {filename}")
# 使用示例
batch_clahe_equalization("input_images", "output_images", clip_limit=2.0)

自定义直方图匹配

import cv2
import numpy as np
import os
def match_histogram(source, target):
    """将源图像的直方图匹配到目标图像的直方图"""
    # 转换到LAB颜色空间
    source_lab = cv2.cvtColor(source, cv2.COLOR_BGR2LAB)
    target_lab = cv2.cvtColor(target, cv2.COLOR_BGR2LAB)
    matched = np.zeros_like(source)
    for i in range(3):
        # 计算每个通道的直方图
        src_hist, _ = np.histogram(source_lab[:,:,i], 256, [0,256])
        tgt_hist, _ = np.histogram(target_lab[:,:,i], 256, [0,256])
        # 计算累积直方图
        src_cdf = np.cumsum(src_hist) / src_hist.sum()
        tgt_cdf = np.cumsum(tgt_hist) / tgt_hist.sum()
        # 创建映射表
        mapping = np.zeros(256, dtype=np.uint8)
        for j in range(256):
            diff = np.abs(tgt_cdf - src_cdf[j])
            mapping[j] = np.argmin(diff)
        # 应用映射
        matched[:,:,i] = mapping[source_lab[:,:,i]]
    return cv2.cvtColor(matched, cv2.COLOR_LAB2BGR)
def batch_histogram_matching(input_folder, reference_image_path, output_folder):
    """批量直方图匹配"""
    os.makedirs(output_folder, exist_ok=True)
    # 读取参考图像
    reference = cv2.imread(reference_image_path)
    # 获取所有图片
    image_files = [f for f in os.listdir(input_folder) 
                   if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
    for filename in image_files:
        img_path = os.path.join(input_folder, filename)
        img = cv2.imread(img_path)
        # 直方图匹配
        matched_img = match_histogram(img, reference)
        # 保存结果
        output_path = os.path.join(output_folder, f"matched_{filename}")
        cv2.imwrite(output_path, matched_img)
        print(f"处理完成: {filename}")
# 使用示例
batch_histogram_matching("input_images", "reference.jpg", "output_images")

使用 ImageMagick 命令行批量处理

# 1. 直方图均衡化
mogrify -path output_folder -equalize *.jpg
# 2. 对比度增强
mogrify -path output_folder -contrast-stretch 5%x95% *.jpg
# 3. 色彩调整
mogrify -path output_folder -level 10%,90% *.jpg
# 4. 使用脚本批量处理
for file in *.jpg; do
    convert "$file" -equalize "output/${file%.jpg}_equalized.jpg"
done

使用 Photoshop 动作(人工辅助)

  1. 创建动作

    • 录制一个直方图调整动作
    • 包含:图像 → 调整 → 色阶/曲线
  2. 批量处理

    • 文件 → 自动 → 批处理
    • 选择源文件夹和目标文件夹
    • 应用创建的动作

建议使用场景

方法 适用场景 优点 缺点
Pillow均衡化 简单快速调整 代码简单,适合批量 效果单一
OpenCV CLAHE 细节增强 控制精细,效果好 参数需调整
直方图匹配 统一风格 可参考目标图像 需要参考图
ImageMagick 命令行操作 无需编程 功能有限
Photoshop 人工精细调整 效果可控 批量效率低

选择合适的方法取决于你的具体需求、技术栈和期望效果,对于大多数批量处理需求,OpenCV的CLAHE方法通常能获得较好的平衡效果。

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