Coding-图像下采样

根据缩放因子下采样图像,处理文件夹

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
from PIL import Image
import os

def resize_images(input_folder, output_folder, scale_factor=0.6):
"""
将指定文件夹内的所有图片分辨率降低一倍并保存到另一个文件夹。

参数:
input_folder (str): 包含图片的输入文件夹路径。
output_folder (str): 用于保存缩小后图片的输出文件夹路径。
scale_factor (float): 图片尺寸缩小的比例,默认为0.5(即分辨率降低一半)。
"""
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)

# 遍历输入文件夹中的文件
for filename in os.listdir(input_folder):
input_path = os.path.join(input_folder, filename)

# 检查是否为图片文件
if os.path.isfile(input_path) and (filename.lower().endswith('.jpg') or
filename.lower().endswith('.jpeg') or
filename.lower().endswith('.png')):
try:
# 打开图片
with Image.open(input_path) as img:
# 计算新的宽度和高度
width, height = img.size
new_width = int(width * scale_factor)
new_height = int(height * scale_factor)

# 调整图片大小
resized_img = img.resize((new_width, new_height), Image.ANTIALIAS)

# 构建输出路径并保存图片
output_path = os.path.join(output_folder, filename)
resized_img.save(output_path)

print(f"Resized and saved {filename} to {output_folder}")
except IOError as e:
print(f"Error processing {filename}: {e}")

# 指定输入和输出文件夹路径
input_folder = 'data'
output_folder = 'data2'

# 调用函数
resize_images(input_folder, output_folder)

根据缩放因子下采样图像,处理文件夹及子文件夹

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
from PIL import Image
import os

def downsample_images(source_folder, target_folder, scale_factor=0.6):
"""
遍历source_folder中的所有子文件夹和mask图片,将图片下采样后保存到target_folder中,
保持原有的目录结构。

参数:
source_folder (str): 包含子文件夹和mask图片的源文件夹路径。
target_folder (str): 用于保存下采样后图片的目标文件夹路径。
scale_factor (float): 图片尺寸缩小的比例,默认为0.5。
"""
# 确保目标文件夹存在
os.makedirs(target_folder, exist_ok=True)

# 遍历源文件夹及其子目录
for root, dirs, files in os.walk(source_folder):
# 计算当前目录相对于源目录的相对路径
relative_path = os.path.relpath(root, source_folder)
target_subdir = os.path.join(target_folder, relative_path)

# 确保目标子目录存在
os.makedirs(target_subdir, exist_ok=True)

for filename in files:
# 只处理图片文件
if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
src_path = os.path.join(root, filename)
dst_path = os.path.join(target_subdir, filename)

try:
# 打开图片并进行下采样
with Image.open(src_path) as img:
width, height = img.size
new_width = int(width * scale_factor)
new_height = int(height * scale_factor)
resized_img = img.resize((new_width, new_height), Image.ANTIALIAS)

# 保存下采样后的图片
resized_img.save(dst_path)
except IOError as e:
print(f"Error processing {src_path}: {e}")

# 指定源文件夹和目标文件夹路径
source_folder = 'r1'
target_folder = 'r2'

# 调用函数
downsample_images(source_folder, target_folder)