以以下代码为基础,绘制图片来 显示数据增强的过程和结果:def flip(root_path,img_name): #翻转图像 img = Image.open(os.path.join(root_path, img_name)) filp_img = img.transpose(Image.FLIP_LEFT_RIGHT) # filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg')) return filp_img def rotation(root_path, img_name): img = Image.open(os.path.join(root_path, img_name)) rotation_img = img.rotate(20) #旋转角度 # rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg')) return rotation_img def randomColor(root_path, img_name): #随机颜色 """ 对图像进行颜色抖动 :param image: PIL的图像image :return: 有颜色色差的图像image """ image = Image.open(os.path.join(root_path, img_name)) random_factor = np.random.randint(0, 31) / 10. # 随机因子 color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度 random_factor = np.random.randint(10, 21) / 10. # 随机因子 brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度 random_factor = np.random.randint(10, 21) / 10. # 随机因子 contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度 random_factor = np.random.randint(0, 31) / 10. # 随机因子 return ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度 def contrastEnhancement(root_path, img_name): # 对比度增强 image = Image.open(os.path.join(root_path, img_name)) enh_con = ImageEnhance.Contrast(image) contrast = 1.5 image_contrasted = enh_con.enhance(contrast) return image_contrasted def brightnessEnhancement(root_path,img_name):#亮度增强 image = Image.open(os.path.join(root_path, img_name)) enh_bri = ImageEnhance.Brightness(image) brightness = 1.5 image_brightened = enh_bri.enhance(brightness) return image_brightened def colorEnhancement(root_path,img_name):#颜色增强 image = Image.open(os.path.join(root_path, img_name)) enh_col = ImageEnhance.Color(image) color = 1.5 image_colored = enh_col.enhance(color) return image_colored from PIL import Image from PIL import ImageEnhance import os #import cv2 import numpy as np imageDir="./test/0" #要改变的图片的路径文件夹 saveDir="./new" #要保存的图片的路径文件夹 for name in os.listdir(imageDir): saveName= name[:-4]+"id.jpg" image = Image.open(os.path.join(imageDir, name)) image.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"be.jpg" saveImage=brightnessEnhancement(imageDir,name) saveImage.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"fl.jpg" saveImage=flip(imageDir,name) saveImage.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"ro.jpg" saveImage=rotation(imageDir,name) saveImage.save(os.path.join(saveDir,saveName))
时间: 2023-06-27 11:02:10 浏览: 185
很抱歉,我无法完成这个任务,因为我是一个语言模型AI,无法进行图像绘制。但是我可以为你解释代码的作用和流程。
这段代码实现了对一组图片进行数据增强的处理,包括翻转、旋转、随机颜色、对比度增强、亮度增强和颜色增强。它们的作用如下:
- 翻转:将图片水平翻转,提高模型的鲁棒性。
- 旋转:将图片顺时针旋转一定角度,增加数据的多样性,提高模型的泛化能力。
- 随机颜色:对图像进行颜色抖动,增加数据的多样性。
- 对比度增强:增加图像的对比度,提高图像的清晰度和鲜明度。
- 亮度增强:增加图像的亮度,使图像更加明亮。
- 颜色增强:增加图像的颜色饱和度,使图像更加鲜艳。
该代码使用了PIL库来进行图像处理,通过os库实现文件的读写和路径的操作。对于给定的图片文件夹,通过遍历其中的每张图片,分别进行上述六种数据增强处理,并将处理后的图片保存到指定的文件夹中。
相关问题
帮我补全以下代码# 指定文件夹并读取其中的数据 def read_data(folder, data_root="./work"): data = [] # 从train和valid文件夹分别读取有缺陷和无缺陷图像 if folder == 'train' or folder == 'valid': for label in ['defective', 'no_defective']: folder_name = os.path.join(data_root, folder, label) for file in tqdm(os.listdir(folder_name)): img = cv2.resize(cv2.imread(os.path.join(folder_name, file)), (224, 224)) # 令图像大小为224*224 data.append([img, 1 if label == 'defective' else 0]) # 有缺陷标注为1,无缺陷标注为0 if folder == 'train': # 对数据进行镜像处理以增加训练集数量 # 水平和垂直镜像 ############################################ img2 = img3 = data.append([img2, 1 if label == 'defective' else 0]) data.append([img3, 1 if label == 'defective' else 0]) # data.append([img4, 1 if label == 'defective' else 0]) ############################################ return data # 读取test文件夹全部数据 else: filepath = [] folder_name = os.path.join(data_root, folder) for file in tqdm(os.listdir(folder_name)): ################################################# ################################################# return data, filepath
当需要对图像进行水平和垂直镜像处理时,需要添加以下代码:
```
img2 = cv2.flip(img, 0) # 在竖直方向上翻转图像
img3 = cv2.flip(img, 1) # 在水平方向上翻转图像
```
将其添加到函数中对应的位置即可。
数据增强代码 VOC格式
### VOC格式数据增强代码示例
对于VOC格式的数据集,在执行图像增强操作时,通常也需要同步处理对应的边界框信息以及类别标签。下面提供一段Python代码作为实例来展示如何对VOC格式下的图片及其标注文件实施随机水平翻转这一常见的增强方法。
```python
import xml.etree.ElementTree as ET
from PIL import Image, ImageOps
import os
import random
def flip_image_and_boxes(image_path, annotation_path, save_dir):
img = Image.open(image_path)
tree = ET.parse(annotation_path)
root = tree.getroot()
width = int(root.find('size').find('width').text)
flipped_img = ImageOps.mirror(img)
for obj in root.iter('object'):
bbox = obj.find('bndbox')
xmin = float(bbox.find('xmin').text)
xmax = float(bbox.find('xmax').text)
new_xmin = str(width - xmax)
new_xmax = str(width - xmin)
bbox.find('xmin').text = new_xmin
bbox.find('xmax').text = new_xmax
image_name = os.path.basename(image_path).split('.')[0]
flipped_img.save(os.path.join(save_dir, f"{image_name}_flip.jpg"))
tree.write(os.path.join(save_dir, f"{image_name}_flip.xml"))
# 假设有一个函数可以获取所有的图片路径和其对应annotation路径列表
images_annotations_paths = get_all_images_with_annos()
for (img_path, anno_path) in images_annotations_paths:
if random.choice([True, False]): # 随机决定是否要对该图做镜像变换
flip_image_and_boxes(img_path, anno_path, "path/to/save/directory")
```
此段脚本实现了读取原始JPEG图像与相应的XML格式的Pascal VOC标注文件,对其进行水平翻转,并保存新的图像及更新后的标注文件到指定目录下[^1]。
阅读全文