第三篇:显示cifar-10中的图片

问题

因为在学习使用cifar-10的过程中,一直对着矩阵进行操作,不知道具体的图片是什么样的

需要将三个32x32的矩阵转化为32x32x3矩阵

因为最后会使用plt.imshow这个函数显示图片,imshow的参数需要是(n,m)or (n,m,3) or (n,m,4)的矩阵

具体参考代码:

# --coding:utf-8 --
import tensorflow as tf
import numpy as np

import matplotlib.pyplot as plt
# 读取单个的batch文件
def unpickle(file):
    import cPickle
    with open('./cifar-10-batches-py/'+file,'rb') as fo:
        dict = cPickle.load(fo)
    return dict


mydata = unpickle('data_batch_1')
X = mydata['data']
label = mydata['labels']
X = np.array(X)
np.set_printoptions(threshold='nan')

new = X.reshape(10000,3,32,32)


# 因为使用imshow将一个矩阵显示为RGB图片,需要
# 将三个32*32的矩阵合成一个32*32*3的三维矩阵

# 下面就是先将这三个矩阵(32*32)转化为1024*1的向量
# 然后使用hstack的功能将每个矩阵上相同位置的值合成
# 一个RGB像素点--->[r,g,b]
# 最后得到 1024*3的矩阵
red   = new[99][0].reshape(1024,1)
green = new[99][1].reshape(1024,1)
blue  = new[99][2].reshape(1024,1)

pic = np.hstack((red,green,blue))

# 打印最开始的32*32的矩阵,
# 因为为RGB图像,所以为有三个32*32的矩阵
print(new[0][0])
print(new[0][1])
print(new[0][2])

# 重新设置pic的形状
pic_rgb = pic.reshape(32,32,3)
# imshow显示的图片格式应该是
# (n,m) or (n,m,3) or (n,m,4)
# 显示最后得到的rgb图片
plt.imshow(pic_rgb)

plt.legend()
plt.show()
这只是其中一种简单的方法,其实我感觉在numpy里边估计都有将三个32x32的矩阵转化为32x32x3的函数,但是对numpy不是很熟悉,没有找到相关的功能函数。

最后贴出上边取的第100张图片的效果:


其实有点超乎我的预想,图片有点模糊,但是还是能看得出是一个车。








  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值