import os from PIL import Image import numpy as np def is_large_gray(image, gray_lower_threshold=70, gray_upper_threshold=230, gray_ratio_threshold=0.7): """ 判断图片是否大面积为灰色(基于像素的颜色值) 参数: - image: 图片对象(PIL Image) - gray_lower_threshold: 灰色下限(低于此值不算“灰色”) - gray_upper_threshold: 灰色上限(高于此值不算“灰色”) - gray_ratio_threshold: 灰色像素占比阈值(>70% 算大面积灰色) 返回:True 表示是大面积灰色,应删除 """ # 将图片转换为 numpy 数组 img_array = np.array(image) # 获取图片的尺寸 height, width, _ = img_array.shape total_pixels = height * width # 判断是否为灰色像素(R、G、B 值都在 gray_lower_threshold 和 gray_upper_threshold 之间) gray_pixels = np.sum( (img_array[:, :, 0] >= gray_lower_threshold) & (img_array[:, :, 0] <= gray_upper_threshold) & (img_array[:, :, 1] >= gray_lower_threshold) & (img_array[:, :, 1] <= gray_upper_threshold) & (img_array[:, :, 2] >= gray_lower_threshold) & (img_array[:, :, 2] <= gray_upper_threshold) ) gray_ratio = gray_pixels / total_pixels return gray_ratio > gray_ratio_threshold def process_images_in_folder(input_folder, output_folder): """ 遍历文件夹,旋转图片并根据条件保存到输出文件夹 """ # 创建输出文件夹(如果不存在) if not os.path.exists(output_folder): os.makedirs(output_folder) # 支持的图片格式 supported_formats = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.tif', '.webp') for filename in os.listdir(input_folder): file_path = os.path.join(input_folder, filename) if not os.path.isfile(file_path): continue if not filename.lower().endswith(supported_formats): continue print(f"处理: {filename}") try: with Image.open(file_path) as img: # 判断是否为大面积灰色 if is_large_gray(img): print(f" 🔴 不保存大面积灰色图片: {filename}") continue # 不保存该图片 # 否则:打开并旋转 180 度 rotated_img = img.rotate(180, expand=False) # 构建新的保存路径 save_path = os.path.join(output_folder, filename) # 保持原格式保存(覆盖原图) rotated_img.save(save_path, format=img.format) print(f" ✅ 已旋转并保存至: {save_path}") except Exception as e: print(f" ❌ 处理失败 {filename}: {e}") # ================ 使用示例 ================ if __name__ == "__main__": folder = "/media/hx/disk/folder_5" output_folder = "/media/hx/disk/folder_5" if not os.path.exists(folder): print("❌ 输入文件夹不存在!") else: process_images_in_folder(folder, output_folder) print("✅ 所有图片处理完成!")