代码总结
这段代码的功能是遍历指定文件夹下的所有图像文件,并修复可能存在的格式问题,然后覆盖原图像。
代码解析
- 设置输入文件夹路径(
input_folder
)。 - 遍历文件夹中的所有文件,筛选出
.jpg
、.jpeg
、.png
、.webp
格式的图像文件。 - 逐个处理图像文件:
- 使用
PIL
读取图像,并转换为 RGB 模式(确保正确加载)。 - 将
PIL
读取的图像转换为NumPy
数组,并从 RGB 变换为 OpenCV 默认的 BGR 格式。 - 使用
cv2.imwrite()
保存处理后的图像,直接覆盖原图像。
- 使用
- 错误处理:
- 如果
cv2.imwrite()
失败,则打印保存失败信息。 - 如果
PIL
读取图像失败(如文件损坏),则捕获异常并打印错误信息。
- 如果
适用场景
- 修复因路径编码问题导致的 OpenCV 读取失败的图片。
- 确保所有图片的颜色通道符合 OpenCV 处理方式(BGR)。
- 批量处理文件夹下的所有图片,并覆盖原图像。
import os
import cv2
import numpy as np
from PIL import Image# 设置图像所在的目录(注意使用原始字符串或正斜杠)
input_folder = r"I:\img\path# 遍历目录下所有图像文件(可根据需要扩展格式)
for file_name in os.listdir(input_folder):if not file_name.lower().endswith(('.jpg', '.jpeg', '.png', '.webp')):continue # 仅处理指定格式的图像file_path = os.path.join(input_folder, file_name)try:# 用 PIL 读取图像,并转换为 RGB 模式img_pil = Image.open(file_path).convert("RGB")# 转换为 NumPy 数组,并将颜色从 RGB 转换为 BGR(OpenCV 默认颜色顺序)img_cv = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)# 使用 OpenCV 保存时直接覆盖原图像success = cv2.imwrite(file_path, img_cv)if success:print(f"已修复并覆盖: {file_path}")else:print(f"保存失败: {file_path}")except Exception as e:print(f"处理失败: {file_path} - {e}")