CIFAR-10解析时的np.transpose(img_a,(1,2,0))

  • 在解析CIFAR-10数据集时,由于数据集存放格式如下:
    在这里插入图片描述
    即数据集中的数据存放时,是把每个32323的图像拉为了一维数组,共3072个数据。前1024个位每个点的R,后面依次为1024个点的G,1024个点的B。
  • 因此,我们在解析时,有以下命令:
mydict = unpickle(file_i)
    print(mydict[b'data'][0])
    img_a = mydict[b'data'][0].reshape(3,32,32) / 255   # CIFAR10数据集在将32*32*3图像拉伸为一维数组时,
    # 依次存放1024个R,1024个G,1014个B数据,将其reshape为(3,32,32),则一共有3层,第一层全是R,第二层全是G,第三层全是B
    img_a = np.transpose(img_a,(1,2,0)) # 翻转数据,将三层的RGB作为图像的深度
    print(img_a)
    cv2.imshow("wcc",img_a)
    userkey = cv2.waitKey()

  • 其中reshape(3,32,32),得到的是高为3、长为32、宽为32的矩阵,第1层有1024个数据,全为R通道数据。第2层为G,第3层为B。
    在执行transpose(img_a,(1,2,0))时,其过程理解如下:
    以下图为例:
    在这里插入图片描述
    红圈1中矩阵为原始矩阵,为方便理解,将(3,32,32)矩阵简化为(3,2,2)矩阵,共3层2行2列,其中第一层为[0 1] [2 3],[0 1]是一层第一行,[2 3]是第一层第二行,每行中有2列。因此,每个点的RGB数据应该是:[0,4,8],[1,5,9],[2,6,10],[3,7,11]
    根据CIFAR-10数据集制作说明,可知第一层的数据全是R,我们在给矩阵进行转置(1,2,0)后,上述结果变为了(2,2,3),共2行2列3层,以行列来看,每个点包含三层数据,分别是从原本的数据中的每一层取了一个,刚好组成RGB,符合图像数据格式,因此可以直接用imshow显示出来。

猜你喜欢

转载自blog.csdn.net/wcc243588569/article/details/129666101