Python读入mnist二进制图像文件并显示实例
图像文件是自己仿照mnist格式制作,每张图像大小为128*128
importstruct importmatplotlib.pyplotasplt importnumpyasnp #读入整个训练数据集图像 filename='train-images-idx3-ubyte' binfile=open(filename,'rb') buf=binfile.read() #读取头四个32bit的interger index=0 magic,numImages,numRows,numColumns=struct.unpack_from('>IIII',buf,index) index+=struct.calcsize('>IIII') #读取一个图片,16384=128*128 im=struct.unpack_from('>16384B',buf,index) index+=struct.calcsize('>16384B') im=np.array(im) im=im.reshape(128,128) fig=plt.figure() plotwindow=fig.add_subplot(111) plt.imshow(im,cmap='gray') plt.show()
补充知识:Python图片转数组,二进制互转
前言
需要导入以下包,没有的通过pip安装
importmatplotlib.pyplotasplt importcv2 fromPILimportImage fromioimportBytesIO importnumpyasnp
1.图片和数组互转
#图片转numpy数组 img_path="images/1.jpg" img_data=cv2.imread(img_path) #numpy数组转图片 img_data=np.linspace(0,255,100*100*3).reshape(100,100,-1).astype(np.uint8) cv2.imwrite("img.jpg",img_data)#在当前目录下会生成一张img.jpg的图片
2.图片和二进制格式互转
#以二进制方式进行图片读取 withopen("img.jpg","rb")asf: img_bin=f.read()#内容读取 #将图片的二进制内容转成真实图片 withopen("img.jpg","wb")asf: f.write(img_bin)#img_bin里面保存着以二进制方式读取的图片内容,当前目录会生成一张img.jpg的图片
3.数组和图片二进制数据互转
""" 以上两种方式"合作"也可以实现,但是中间会有对外存的读写 一般这些到磁盘的IO操作还是很耗时间的 所以在内存直接处理会较好 """ #将数组转成图片的二进制数据 img_data=np.linspace(0,255,100*100*3).reshape(100,100,-1).astype(np.uint8) ret,buf=cv2.imencode(".jpg",img_data) img_bin=Image.fromarray(np.uint8(buf)).tobytes() #将图片二进制数据转为数组 img_data=plt.imread(BytesIO(img_bin),"jpg") print(type(img_data)) print(img_data.shape) """ out:(100,100,3) """
或许还有别的方式也能实现图片二进制数据和数组的转换,不足之处希望大家指出
以上这篇Python读入mnist二进制图像文件并显示实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。