opencv - 未根据使用 imagedatagenerator 和 flow 定义的范围创建的图像
问题描述
我已经编写了用于数据增强和仅保存图像的代码。尚未创建模型。我计划先创建增强图像,然后再训练我的模型。问题是并非所有图像都被用于增强和保存。我有 275 张图像,范围为 50,这意味着应该创建总共 13750 张图像,但是我只从增强中获得了大约 7500 张图像。我尝试调试并发现在读取图像以及增强图像方面没有问题,而是在. 跟随方法不保存图像。当save_format
参数选择为 jpeg 时,情况会变得更糟。我想知道为什么会发生这种情况,更重要的是是否有解决方案或解决这个问题。(注意:-我只是这个领域的初学者)。
import cv2
import glob
import keras
import numpy as np
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
types=('*.png','*.jpg','*.jpeg','*.jfif','*.bmp')
path2="C:\\Users\\Cato\\Desktop\\BE project\\Augmented data\\hugging"
#path2="C:\\Users\\Cato\\Desktop\\output"
datagen=ImageDataGenerator(rotation_range=40,width_shift_range=0.27,height_shift_range=0.27,zoom_range=[0.9,1.5],brightness_range=[0.3,1.0],horizontal_flip=True,vertical_flip=False)
i=0;
for files in types:
path1="C:\\Users\\Cato\\Desktop\\BE project\\Augmented data\\grayscale\\hugging\\"+str(files)
#path1="C:\\Users\\Cato\\Desktop\\input\\"+str(files)
i=i+1;
for file in glob.glob(path1):
i=i+1;
image = np.expand_dims(cv2.imread(file), 0)
datagen.fit(image)
for x,val in zip(datagen.flow(image,save_to_dir=path2),range(50)):
pass
print("Augmentation completed")
解决方案
有 2 个问题导致此问题出现。首先是使用 flow_from_directory,其次我不知道为什么,但是以 jpeg 格式保存图像解决了这个问题。由于未知原因,我猜测代码背后的保存机制不适用于 png 格式。尽管应该指出它在很大程度上解决了问题,但并非完全解决了问题。这意味着如果我想从数据生成器生成 15000 张图像,它现在会生成 13500 张图像。如果图像以 png 格式保存,则此图像计数将减少到 7-8k 图像。
推荐阅读
- mysql - Sequelize - 如何使用种子文件添加数据进行关联
- heidisql - Heidisql-无法连接到本地主机
- visual-studio-code - 如何使用 Visual Studio Code 编辑 iPad 的“在我的 iPad 上”文件夹中的文件?
- javascript - 从 QR 码获取 unicode PNG 响应到 PNG API
- ios - iOS Mapkit - dequeueReusableAnnotationView 与 Interface Builder XIB
- javascript - JavaScript 程序如何知道全局属性名称是否由 ECMA-262 定义?
- caching - “更高级别”的缓存是指 L 之后或更接近 CPU 的更大数量吗?
- angular - 根据对象中的其他值从列表中删除选项?
- javascript - 在组件中将 Vanilla Javascript 转换为 React 应用程序
- c++ - 未在此范围内声明“周长”