如何批量给一个文件夹里的各个文件加噪并用np.savez分别保存到另一个文件夹
时间: 2024-02-12 16:07:08 浏览: 156
可以使用Python的Pillow库(PIL)来给一个文件夹里的所有文件加噪,并使用numpy库的np.savez函数将每个加噪后的文件数据分别保存到另一个文件夹中。具体实现步骤如下:
1. 导入Pillow库和numpy库
```python
from PIL import Image, ImageFilter
import numpy as np
import os
```
2. 定义源文件夹和目标文件夹路径
```python
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
```
3. 遍历源文件夹中的所有文件,并对每个文件进行加噪处理,并将加噪后的文件数据分别保存到目标文件夹中
```python
# 遍历源文件夹中的所有文件
for file_name in os.listdir(src_folder):
# 构造源文件和目标文件的路径
src_path = os.path.join(src_folder, file_name)
dst_path = os.path.join(dst_folder, file_name)
# 判断文件是否是图片文件,如果不是则跳过
if not file_name.endswith('.jpg') and not file_name.endswith('.png'):
continue
# 打开图片文件
with Image.open(src_path) as img:
# 加噪处理
img = img.filter(ImageFilter.GaussianBlur(radius=5))
# 将图片转换为灰度图,并缩放到28x28大小
img = img.convert('L').resize((28, 28))
# 将图片转换为numpy数组,并将数据保存到目标文件中
img_data = np.array(img)
np.savez(dst_path, img_data=img_data)
```
上述代码中,使用ImageFilter模块中的GaussianBlur函数给图片加上高斯模糊噪声,并将图片转换为灰度图,并缩放到28x28大小。可以根据需要调整噪声强度和类型、图像大小等参数。保存文件时,使用np.savez函数将numpy数组保存到目标文件中。每个文件保存为一个.npz文件,文件名与源文件名相同。
完整代码示例如下:
```python
from PIL import Image, ImageFilter
import numpy as np
import os
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
for file_name in os.listdir(src_folder):
src_path = os.path.join(src_folder, file_name)
dst_path = os.path.join(dst_folder, file_name)
if not file_name.endswith('.jpg') and not file_name.endswith('.png'):
continue
with Image.open(src_path) as img:
img = img.filter(ImageFilter.GaussianBlur(radius=5))
img = img.convert('L').resize((28, 28))
img_data = np.array(img)
np.savez(dst_path, img_data=img_data)
```
注意,上述代码中只处理了jpg和png格式的图片文件,如果需要处理其他格式的文件,则需要更改代码中的文件类型判断条件。同时,处理噪声的方法也可以根据需要进行更改。
阅读全文