首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用TensorFlow扩充文件夹中的所有图像

如何使用TensorFlow扩充文件夹中的所有图像
EN

Stack Overflow用户
提问于 2020-05-28 22:46:34
回答 2查看 1.7K关注 0票数 0

将文件夹上传到colab并增强图像

EN

回答 2

Stack Overflow用户

发布于 2020-05-29 06:41:38

如果在colab中执行此操作,请首先上传包含所有图像的文件夹,然后创建一个新的空文件夹以保存增强的图像

代码语言:javascript
复制
import keras
import cv2
import os
import glob
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
datagen = ImageDataGenerator(rotation_range =15, 
                         width_shift_range = 0.2, 
                         height_shift_range = 0.2,  
                         rescale=1./255, 
                         shear_range=0.2, 
                         zoom_range=0.2, 
                         horizontal_flip = True, 
                         fill_mode = 'nearest', 
                         data_format='channels_last', 
                         brightness_range=[0.5, 1.5]) 


img_dir = "folder-name" # Enter Directory of all images 
data_path = os.path.join(img_dir,'*g')
files = glob.glob(data_path)
data = []
for f1 in files:
    img = cv2.imread(f1)
    data.append(img)

x = img_to_array(img)
x = x.reshape((1,) + x.shape)

i = 0
path, dirs, files = next(os.walk("folder-name"))
file_count = len(files) #to find number of files in folder

for batch in datagen.flow (x, batch_size=1, save_to_dir =r'new-folder-name',save_prefix="a",save_format='jpg'):
    i+=1
    if i==file_count:
      break

可以从新的文件夹下载增强的图像

票数 2
EN

Stack Overflow用户

发布于 2020-11-28 23:52:20

值得注意的是,这里有一个受上述答案启发的不同示例

代码语言:javascript
复制
import datetime
import glob
from pathlib import Path
import random
from tkinter import *
from tkinter import filedialog, simpledialog

def generate_augmented_images(args):
    """
    Generates augmented versions of images in a particular folder and saves them to a new folder.
    Each augmented image has prefix from original PNG image name.
    A dialog selects the source folder and another asks augmentation factor.
    
    """

    start_timestr = time.strftime("%Y%m%d-%H%M")
    src_data_folder = SRC_DATA_FOLDER
    os.chdir(src_data_folder)
    root = Tk()
    root.withdraw()
    src_data_folder = filedialog.askdirectory()
    if len(src_data_folder) == 0:
        log.info('aborted')
        quit(1)

    train_datagen = ImageDataGenerator(  # 实例化
        rescale=1. / 256,  # todo check this
        rotation_range=15,  # 图片随机转动的角度
        width_shift_range=0.2,  # 图片水平偏移的幅度
        height_shift_range=0.2,  # don't shift too much vertically to avoid losing top of card
        fill_mode='constant',
        cval=0,  # fill edge pixels with black; default fills with long lines of color
        zoom_range=[.9, 1.25],  # NOTE zoom >1 minifies, don't zoom in (<1) too much in to avoid losing joker part of card
        # horizontal_flip=False,
    )  # 随机放大或缩小

    log.info(f'train_datagen: {train_datagen}')

    aug_factor = simpledialog.askinteger('Augmentation factor','Factor by which to augment?')
    if aug_factor is None:
        log.info('aborted')
        quit(0)

    base=os.path.split(src_data_folder)[-1]
    aug_folder = os.path.join(SRC_DATA_FOLDER,f'{base}-augmented-{start_timestr}')
    data_path = os.path.join(src_data_folder, '*.png')
    files = glob.glob(data_path) # get list of all PNGs

    nsrc=len(files)
    ntotal=int(aug_factor*nsrc)
    log.info(f'saving {aug_factor}X={ntotal} augmented images to {aug_folder} from {src_data_folder} with {nsrc} samples')
    try:
        Path(aug_folder).mkdir(parents=True)
    except:
        log.error(f'{aug_folder} already exists')
        quit(1)

    i = 0
    cv2.namedWindow('original', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('original', 600, 600)
    cv2.namedWindow('augmented', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('augmented', 600, 600)
    cv2.moveWindow('augmented',0,600)
    nsaved=0
    for f in tqdm(files):
        showit=nsaved%100==0
        img = cv2.imread(f)
        x = img_to_array(img)
        if showit:
            cv2.imshow('original', (1/256.)*x)
        x = x.reshape((1,) + x.shape)
        i=0
        base = os.path.splitext(os.path.split(f)[-1])[0] # e.g. /a/b/c/d/0900111.png gives 0900111
        for batch in train_datagen.flow(x, batch_size=1, save_to_dir=aug_folder, save_prefix=base, save_format='png'):
            i += 1
            nsaved+=1
            img_aug=batch[0]
            if showit:
                cv2.imshow('augmented', img_aug)
            k = cv2.waitKey(15) & 0xff
            if k == ord('x') or k == ord('q'):
                log.info(f'saved {nsaved} augmented images to {aug_folder} from {src_data_folder}')
                quit(0)
            if i == aug_factor:
                break
    log.info(f'saved {nsaved} augmented images to {aug_folder} from {src_data_folder}')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62067609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档