帮我写一个python程序,利用opencv将文件夹中的图像进行数据集扩充,文件夹中的每张图片都进行图像翻转,图像缩放,图像旋转,图像平移,图像变换,并分别标号保存在另一个文件夹中
时间: 2024-04-22 19:24:35 浏览: 105
当然可以!以下是一个示例的Python程序,使用OpenCV将文件夹中的图像进行数据集扩充,对每张图片进行图像翻转、图像缩放、图像旋转、图像平移、图像变换,并将扩充后的图像分别标号保存在另一个文件夹中:
```python
import os
import cv2
import numpy as np
def augment_dataset(input_folder, output_folder):
# 创建输出文件夹
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 获取输入文件夹中的图像文件列表
image_files = os.listdir(input_folder)
# 遍历图像文件列表
for filename in image_files:
# 构建图像文件路径
input_path = os.path.join(input_folder, filename)
# 读取图像
image = cv2.imread(input_path)
# 获取图像扩充后的文件名前缀
output_prefix = os.path.splitext(filename)[0]
# 图像翻转
flipped_image = cv2.flip(image, 1)
save_image(flipped_image, output_folder, output_prefix + '_flipped')
# 图像缩放
scaled_image = cv2.resize(image, None, fx=0.5, fy=0.5)
save_image(scaled_image, output_folder, output_prefix + '_scaled')
# 图像旋转
rotated_image = rotate_image(image, angle=45)
save_image(rotated_image, output_folder, output_prefix + '_rotated')
# 图像平移
translated_image = translate_image(image, x=50, y=50)
save_image(translated_image, output_folder, output_prefix + '_translated')
# 图像变换
transformed_image = transform_image(image)
save_image(transformed_image, output_folder, output_prefix + '_transformed')
def save_image(image, output_folder, filename):
# 图像保存路径和文件名
output_path = os.path.join(output_folder, filename + '.jpg')
# 保存图像
cv2.imwrite(output_path, image)
def rotate_image(image, angle):
height, width = image.shape[:2]
center = (width / 2, height / 2)
rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))
return rotated_image
def translate_image(image, x, y):
translation_matrix = np.float32([[1, 0, x], [0, 1, y]])
translated_image = cv2.warpAffine(image, translation_matrix, (image.shape[1], image.shape[0]))
return translated_image
def transform_image(image):
height, width = image.shape[:2]
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
transformation_matrix = cv2.getAffineTransform(pts1, pts2)
transformed_image = cv2.warpAffine(image, transformation_matrix, (width, height))
return transformed_image
# 调用函数进行数据集扩充
input_folder = '/path/to/input_folder' # 输入文件夹路径
output_folder = '/path/to/output_folder' # 输出文件夹路径
augment_dataset(input_folder, output_folder)
```
请将 `input_folder` 替换为你的输入文件夹路径,将 `output_folder` 替换为你想要保存扩充图像的输出文件夹路径。在这个示例中,我们对每个图像进行了图像翻转、图像缩放、图像旋转、图像平移和图像变换的操作。你可以根据需要自定义这些操作,并根据需要添加其他的数据扩充操作。每个扩充后的图像都会使用原始文件名加上相应的后缀进行保存。
阅读全文