56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import os
|
||
import cv2
|
||
import shutil
|
||
|
||
# ====================== 用户配置 ======================
|
||
SOURCE_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/zjdata15/2" # 原图片文件夹
|
||
OUTPUT_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/zjdata15/2" # 模糊图输出文件夹
|
||
BLUR_THRESHOLD = 180 # 模糊阈值,越大越严格(100~300)
|
||
# ======================================================
|
||
|
||
IMG_EXT = [".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".webp"]
|
||
|
||
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
||
|
||
def is_blurry(image_path, threshold=150):
|
||
"""使用拉普拉斯方差检测是否模糊"""
|
||
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
||
|
||
if img is None:
|
||
return False # 读取失败跳过
|
||
|
||
variance = cv2.Laplacian(img, cv2.CV_64F).var()
|
||
|
||
return variance < threshold, variance
|
||
|
||
|
||
def scan_and_filter():
|
||
total = 0
|
||
bad = 0
|
||
|
||
for filename in os.listdir(SOURCE_DIR):
|
||
if not any(filename.lower().endswith(ext) for ext in IMG_EXT):
|
||
continue
|
||
|
||
img_path = os.path.join(SOURCE_DIR, filename)
|
||
total += 1
|
||
|
||
is_bad, score = is_blurry(img_path, BLUR_THRESHOLD)
|
||
|
||
if is_bad:
|
||
bad += 1
|
||
shutil.copy(img_path, os.path.join(OUTPUT_DIR, filename))
|
||
print(f"[低质量] {filename} — 清晰度评分: {score:.2f}")
|
||
else:
|
||
print(f"[清晰] {filename} — 清晰度评分: {score:.2f}")
|
||
|
||
print("\n============================")
|
||
print(f"扫描总数: {total}")
|
||
print(f"检测为模糊/马赛克: {bad}")
|
||
print(f"已保存到: {OUTPUT_DIR}")
|
||
print("============================\n")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
scan_and_filter()
|