File size: 2,085 Bytes
2ecc7ab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import cv2
import numpy as np
import shutil
import random

# ================= 配置 =================
# 原始高清数据集路径
source_root = r"G:\datasets\lolblurtest\test\high_sharp_original"
# 实验根目录
exp_root = r"G:\IR_Experiment\Order_Test"

# 输出路径:生成的“坏图”放这里
target_input_dir = os.path.join(exp_root, "input_dark_noisy")
os.makedirs(target_input_dir, exist_ok=True)

# ================= 降质函数 =================
def degradate_image(img):
    # 1. 变暗 (模拟低光) - 亮度降为 20%
    img = img.astype(np.float32) * 0.2
    
    # 2. 加噪 (模拟高感光度噪声)
    noise = np.random.normal(0, 15, img.shape) # sigma=15
    img = img + noise
    
    # 截断并转回 uint8
    img = np.clip(img, 0, 255).astype(np.uint8)
    return img

# ================= 执行提取与生成 =================
print("🚀 开始构建数据集...")
count = 0

# 遍历源目录
for root, dirs, files in os.walk(source_root):
    # 找到图片文件
    img_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    
    if img_files:
        # 每个文件夹只取第一张,节省时间,够测就行
        file_name = img_files[0]
        src_path = os.path.join(root, file_name)
        
        # 读取
        img = cv2.imread(src_path)
        if img is None: continue
        
        # 制造降质
        bad_img = degradate_image(img)
        
        # 保存 (重命名以防冲突)
        folder_name = os.path.basename(root)
        save_name = f"{folder_name}_{file_name}"
        save_path = os.path.join(target_input_dir, save_name)
        
        cv2.imwrite(save_path, bad_img)
        count += 1
        print(f"[{count}] 处理: {save_name}")
        
        # 限制数量:为了做 demo,生成 5-10 张就足够说明问题了,多了跑得慢
        if count >= 8: 
            break

print(f"✅ 数据集准备完毕!共 {count} 张。")
print(f"📂 坏图位置: {target_input_dir}")