本文目录导读:

方法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
使用说明
-
创建文件夹结构:
project/ ├── input_images/ # 放入要处理的图片 ├── output_images/ # 处理后的图片会自动保存到这里 └── sharpness_script.py -
参数调整建议:
sharpness_factor:1.0为原始,1.5-3.0为常用范围- 首次使用时建议先测试1-2张图片
- 过高的清晰度会产生噪点
-
适用场景:
- 批量处理数码照片
- 扫描文档的清晰度提升
- 图像预处理
选择适合你需求的方法,调整参数后即可批量处理图片!