matplotlib创建并显示子图

import os
import cv2
import numpy as np
import matplotlib.pyplot as plt

def get_batch(path,batch_size):
    #获取所有图片路径
    img_list = [os.path.join(path,i) for i in os.listdir(path)]
    #获取可以训练的批次数
    n_batchs = len(img_list)//batch_size
    #只保留可训练的整数倍张的图片
    img_list = img_list[:n_batchs*batch_size]
    #将这些训练数据分成一批次一批次的
    for i in range(n_batchs):
        #按顺序获取一个批次的数据路径
        tmp_img_list = img_list[i*batch_size:(i+1)*batch_size]
        # 将这批读取过来
        imgs = [cv2.imread(img) for img in tmp_img_list]
        #进行转换
        imgs = np.array(imgs)
        #构造一个生成器以便
        yield imgs

def vis_img(batch_size, samples,i):
    #创建8行8列的子图,每个子图的大小是7x7,并且共享x轴和y轴
    #返回一个figure图像和子图ax的array列表
    fig, axes = plt.subplots(figsize=(12, 12), nrows=8, ncols=8, sharey=True, sharex=True)
    #axes.flatten()是将所有子图对象形成一个列表
    #将可迭代对象子图列表和这一批次的图片中的每一个对应的都打包成一个元组
    for ax, img in zip(axes.flatten(), samples[batch_size]):
        ax.xaxis.set_visible(False)#去掉x轴的栅格
        ax.yaxis.set_visible(False)#去掉y轴的栅格
        #将每一个子图显示出来
        im = ax.imshow(img.reshape((96, 96, 3)))
    plt.pause(0.5)

imgs = [img for img in get_batch('faces', 64)]
imgs = np.array(imgs)
for i in range(len(imgs)):
    vis_img(i, imgs, 0)

猜你喜欢

转载自blog.csdn.net/weixin_38241876/article/details/90748221