您的位置:首页 > 其它

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

2017-09-19 19:45 267 查看

问题

因为在学习使用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张图片的效果:



其实有点超乎我的预想,图片有点模糊,但是还是能看得出是一个车。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: