批量调整图片清晰度的脚本

wen 实用脚本 2

本文目录导读:

批量调整图片清晰度的脚本

  1. 方法1:使用PIL/Pillow(基础调整)
  2. 方法2:使用OpenCV(更高级的处理)
  3. 方法3:使用PIL的详细版本(支持预览和调整)
  4. 安装依赖
  5. 使用说明

方法1:使用PIL/Pillow(基础调整)

import os
from PIL import Image, ImageEnhance
import glob
def batch_adjust_sharpness(input_dir, output_dir, sharpness_factor=2.0):
    """
    批量调整图片清晰度
    参数:
        input_dir: 输入图片文件夹路径
        output_dir: 输出图片文件夹路径
        sharpness_factor: 清晰度因子 (1.0=原始, >1.0=更锐利, <1.0=更模糊)
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    # 支持的图片格式
    extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tiff']
    for ext in extensions:
        for filepath in glob.glob(os.path.join(input_dir, ext)):
            try:
                # 打开图片
                img = Image.open(filepath)
                # 创建清晰度增强器
                enhancer = ImageEnhance.Sharpness(img)
                # 调整清晰度
                enhanced_img = enhancer.enhance(sharpness_factor)
                # 保存图片
                filename = os.path.basename(filepath)
                output_path = os.path.join(output_dir, filename)
                enhanced_img.save(output_path)
                print(f"已处理: {filename} → 清晰度因子: {sharpness_factor}")
            except Exception as e:
                print(f"处理 {filepath} 时出错: {e}")
# 使用示例
if __name__ == "__main__":
    # 配置参数
    input_folder = "input_images"  # 输入文件夹
    output_folder = "output_images"  # 输出文件夹
    sharpness = 2.0  # 清晰度因子 (推荐1.5-3.0)
    batch_adjust_sharpness(input_folder, output_folder, sharpness)

方法2:使用OpenCV(更高级的处理)

import cv2
import os
import glob
def batch_sharpen_opencv(input_dir, output_dir, method='unsharp', strength=1.0):
    """
    使用OpenCV批量锐化图片
    参数:
        input_dir: 输入文件夹
        output_dir: 输出文件夹
        method: 锐化方法 ('unsharp', 'laplacian', 'custom')
        strength: 锐化强度 (0.5-2.0)
    """
    os.makedirs(output_dir, exist_ok=True)
    # 自定义锐化核
    custom_kernel = np.array([
        [0, -1, 0],
        [-1, 5, -1],
        [0, -1, 0]
    ])
    # 高强度的锐化核
    strong_kernel = np.array([
        [-1, -1, -1],
        [-1, 9, -1],
        [-1, -1, -1]
    ])
    extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp']
    for ext in extensions:
        for filepath in glob.glob(os.path.join(input_dir, ext)):
            try:
                # 读取图片
                img = cv2.imread(filepath)
                if img is None:
                    continue
                # 根据方法选择处理方式
                if method == 'unsharp':
                    # 高斯模糊
                    blurred = cv2.GaussianBlur(img, (0, 0), 3)
                    # 反锐化掩蔽
                    sharpened = cv2.addWeighted(img, 1.0 + strength, 
                                               blurred, -strength, 0)
                elif method == 'laplacian':
                    # 拉普拉斯锐化
                    laplacian = cv2.Laplacian(img, cv2.CV_64F)
                    sharpened = cv2.convertScaleAbs(img - strength * laplacian)
                elif method == 'custom':
                    # 自定义核锐化
                    kernel = custom_kernel if strength < 1.5 else strong_kernel
                    kernel = kernel * strength
                    sharpened = cv2.filter2D(img, -1, kernel)
                # 保存图片
                filename = os.path.basename(filepath)
                output_path = os.path.join(output_dir, filename)
                cv2.imwrite(output_path, sharpened)
                print(f"已处理: {filename} → 方法: {method}, 强度: {strength}")
            except Exception as e:
                print(f"处理 {filepath} 时出错: {e}")
# 使用示例
if __name__ == "__main__":
    import numpy as np
    input_folder = "input_images"
    output_folder = "output_images"
    # 使用反锐化掩蔽方法,强度1.5
    batch_sharpen_opencv(input_folder, output_folder, 
                        method='unsharp', strength=1.5)

方法3:使用PIL的详细版本(支持预览和调整)

import os
from PIL import Image, ImageEnhance, ImageFilter
import glob
class ImageSharpener:
    def __init__(self, input_dir, output_dir):
        self.input_dir = input_dir
        self.output_dir = output_dir
        os.makedirs(output_dir, exist_ok=True)
    def enhance_sharpness(self, factor=2.0):
        """使用ImageEnhance增强清晰度"""
        return self._process_images('enhance', factor)
    def filter_sharpen(self):
        """使用Filter的锐化效果"""
        return self._process_images('filter')
    def smart_sharpen(self, radius=2, percent=150):
        """智能锐化(先模糊再叠加)"""
        return self._process_images('smart', {'radius': radius, 'percent': percent})
    def _process_images(self, method, params=None):
        processed = 0
        failed = 0
        extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tiff']
        for ext in extensions:
            for filepath in glob.glob(os.path.join(self.input_dir, ext)):
                try:
                    img = Image.open(filepath).convert('RGB')
                    if method == 'enhance':
                        enhancer = ImageEnhance.Sharpness(img)
                        result = enhancer.enhance(params)
                    elif method == 'filter':
                        result = img.filter(ImageFilter.SHARPEN)
                        # 多次锐化
                        result = result.filter(ImageFilter.SHARPEN)
                    elif method == 'smart':
                        # 创建模糊版本
                        blurred = img.filter(ImageFilter.GaussianBlur(radius=params['radius']))
                        # 混合原图和模糊图
                        result = Image.blend(img, blurred, 
                                            (100 - params['percent']) / 100)
                    # 保存结果
                    filename = os.path.basename(filepath)
                    name, ext = os.path.splitext(filename)
                    output_path = os.path.join(self.output_dir, f"{name}_sharp{ext}")
                    result.save(output_path, quality=95)
                    print(f"✓ 处理成功: {filename}")
                    processed += 1
                except Exception as e:
                    print(f"✗ 处理失败: {filepath}")
                    print(f"  错误: {e}")
                    failed += 1
        print(f"\n处理完成: {processed} 成功, {failed} 失败")
        return processed, failed
# 使用示例
if __name__ == "__main__":
    sharpener = ImageSharpener("input_images", "output_images")
    # 方法1: 基础增强
    sharpener.enhance_sharpness(factor=2.5)
    # 方法2: 滤镜锐化
    # sharpener.filter_sharpen()
    # 方法3: 智能锐化
    # sharpener.smart_sharpen(radius=1, percent=130)

安装依赖

pip install Pillow opencv-python numpy

使用说明

  1. 创建文件夹结构

    project/
    ├── input_images/    # 放入要处理的图片
    ├── output_images/   # 处理后的图片会自动保存到这里
    └── sharpness_script.py
  2. 参数调整建议

    • sharpness_factor:1.0为原始,1.5-3.0为常用范围
    • 首次使用时建议先测试1-2张图片
    • 过高的清晰度会产生噪点
  3. 适用场景

    • 批量处理数码照片
    • 扫描文档的清晰度提升
    • 图像预处理

选择适合你需求的方法,调整参数后即可批量处理图片!

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