如何批量给一个文件夹里的文件加噪并用np.savez保存到另一个文件夹
时间: 2024-02-12 14:07:03 浏览: 70
批量处理图片并保存至另一个文件夹中
5星 · 资源好评率100%
可以使用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. 定义一个空的numpy数组用来存储所有加噪后的图片数据
```python
data = np.empty((0, 28 * 28))
```
4. 遍历源文件夹中的所有图片,并对每张图片进行加噪处理,并将加噪后的图片数据添加到numpy数组中
```python
# 遍历源文件夹中的所有图片
for file_name in os.listdir(src_folder):
# 构造源文件和目标文件的路径
src_path = os.path.join(src_folder, file_name)
# 打开图片文件
with Image.open(src_path) as img:
# 加噪处理
img = img.filter(ImageFilter.GaussianBlur(radius=5))
# 将图片转换为灰度图,并缩放到28x28大小
img = img.convert('L').resize((28, 28))
# 将图片转换为numpy数组,并将数据添加到data中
img_data = np.array(img).reshape(1, -1)
data = np.append(data, img_data, axis=0)
```
上述代码中,使用ImageFilter模块中的GaussianBlur函数给图片加上高斯模糊噪声,并将图片转换为灰度图,并缩放到28x28大小。可以根据需要调整噪声强度和类型、图像大小等参数。
5. 使用np.savez函数将numpy数组保存到目标文件夹中
```python
# 构造目标文件的路径
dst_path = os.path.join(dst_folder, 'data.npz')
# 将数据保存到目标文件中
np.savez(dst_path, data=data)
```
完整代码示例如下:
```python
from PIL import Image, ImageFilter
import numpy as np
import os
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
data = np.empty((0, 28 * 28))
for file_name in os.listdir(src_folder):
src_path = os.path.join(src_folder, file_name)
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).reshape(1, -1)
data = np.append(data, img_data, axis=0)
dst_path = os.path.join(dst_folder, 'data.npz')
np.savez(dst_path, data=data)
```
注意,上述代码中只处理了jpg和png格式的图片文件,如果需要处理其他格式的文件,则需要更改代码中的文件类型判断条件。同时,处理噪声的方法也可以根据需要进行更改。
阅读全文