从图像生成器绘制图像

Posted

技术标签:

【中文标题】从图像生成器绘制图像【英文标题】:Plot images from Image Generator 【发布时间】:2020-03-31 16:14:26 【问题描述】:

我正在尝试绘制由我的图像生成器创建的图像。到目前为止,这是我提供给生成器的数据代码:

train_img_gen = train_img_data_gen.flow_from_directory(os.path.join(training_dir, 'images'),
                                                   target_size=(img_h, img_w),
                                                   batch_size=bs, 
                                                   class_mode=None, # Because we have no class subfolders in this case
                                                   shuffle=True,
                                                   interpolation='bilinear',
                                                   seed=SEED)
#edited part following the already existing answer on ***
x_batch, y_batch = next(train_img_gen)
for i in range (0,32):
    image = x_batch[i]
    plt.imshow(image.transpose(2,1,0))
    plt.show()

我关注了这个问题:Keras images,但没有任何成功。

如何绘制(例如)我的imageGenerator 生成的前 n 张图像?

编辑:

我添加了上述问题中使用的代码,但出现此错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-1a18ce1c1a76> in <module>
     54 valid_gen = zip(valid_img_gen, valid_mask_gen)
     55 
---> 56 x_batch, y_batch = next(train_img_gen)
     57 for i in range (0,32):
     58     image = x_batch[i]

ValueError: too many values to unpack (expected 2)

【问题讨论】:

您收到错误消息了吗?始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图)(不是评论)。还有其他有用的信息。 编辑错误 将结果赋值给一个变量result = next(train_img_gen) 并打印它print(result) - 它似乎只返回一个值,而不是您期望的两个值。也许你需要x_batch = next(train_img_gen) result 返回具有以下形状的元素矩阵:(4, 256, 256, 3) 因此您可能有 4 张尺寸为 256x256 和 RGB (3) 颜色的图像。可以尝试显示plt.imshow( result[0] )plt.imshow( result[1] ) 【参考方案1】:

最后我解决了这个问题,这是一个尺寸问题。

工作代码是:

x= train_img_gen.next()
for i in range(0,4):
    image = x[i]
    plt.imshow(image)
    plt.show()

生成器为每次迭代返回一个形状为(4,256,256,3) 的矩阵,这意味着我们有 4 个大小为 256x256 和 3 个通道 (RGB) 的图像。

ImageDataGenerator 一次可以处理 4 个图像的“块”(至少在这种情况下,我没有官方参考关于它每次加载多少图像),因为它的主要目的是动态加载图像在训练模型时(避免在内存中预加载大量数据)。

【讨论】:

【参考方案2】:
for i in range(len(train_img_gen)):
    batch = train_img_gen[i]

    if batch is made of x and y: #this line is pseudocode
        x, y = batch

    if batch has only x: #this line is peudocode
        x = batch 

    print('images in batch:', len(x))

    for image in x:
        plot

【讨论】:

“它由 x 和 y 组成”是什么意思? 图像和类

以上是关于从图像生成器绘制图像的主要内容,如果未能解决你的问题,请参考以下文章

从绘制在图像上的文本中删除顶部和底部填充

在 iOS 中从地图生成图像

Haskell在图像上绘制图像

SimCLR,增强生成一张图像而不是两张

setInterval() 没有删除之前绘制的图像[重复]

计算机视觉基础MATLAB程序绘制空间内的彩色图像像素变化曲面等值线图生成子图像,显示该子图像的直方图与茎干图子图像进行自适应阈值分割和对比度拉伸,彩色图像处理