【python】还原二进制图像(可视化):mnist,cifar10,cifar100

Mnist

参考网址:

1)http://blog.csdn.net/u014046170/article/details/47445919

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from PIL import Image
import struct


def read_image(filename):
    f = open(filename, 'rb')
    index = 0
    buf = f.read()
    f.close()

    magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
    index += struct.calcsize('>IIII')

    # xrange has become range in python 3
    for i in range(images):
        # for i in xrange(2000):
        # 创建一张空白的图片,其中的’L’代表这张图片是灰度图
        image = Image.new('L', (columns, rows))
        for x in range(rows):
            for y in range(columns):
                image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))
                index += struct.calcsize('>B')
    
        print('save ' + str(i) + ' image')
        image.save('test_data/' + str(i) + '.png')


def read_label(filename, saveFilename):
    f = open(filename, 'rb')
    index = 0
    buf = f.read()
    
    f.close()

    magic, labels = struct.unpack_from('>II' , buf , index)
    index += struct.calcsize('>II')
  
    labelArr = [0] * labels
     #labelArr = [0] * 2000


    for x in range(labels):
    #for x in xrange(2000):
        labelArr[x] = int(struct.unpack_from('>B', buf, index)[0])
        index += struct.calcsize('>B')

    save = open(saveFilename, 'w')

    save.write(','.join(map(lambda x: str(x), labelArr)))
    save.write('\n')

    save.close()
    print('save labels success')


if __name__ == '__main__':
    read_image('t10k-images.idx3-ubyte')
    read_label('t10k-labels.idx1-ubyte', 'test_data/label.txt')
    



Cifar10

参考网址:

1)数据官网:http://www.cs.toronto.edu/~kriz/cifar.html

# -*- coding: utf-8 -*-

import pickle as p
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as plimg
from PIL import Image
import os

def load_CIFAR_batch(filename):
    """ load single batch of cifar """
    with open(filename, 'rb')as f:
        datadict = p.load(f)
        X = datadict['data']
        Y = datadict['labels']
        X = X.reshape(10000, 3, 32, 32)
        Y = np.array(Y)
        return X, Y

def load_CIFAR_Labels(filename):
    with open(filename, 'rb') as f:
        lines = [x for x in f.readlines()]
        print(lines)

def get_class_name(lable_id):
    if(lable_id=="0"):
        class_name = "airplane"
    elif(lable_id=="1"):
        class_name = "automobile"

    elif(lable_id=="2"):
        class_name = "bird"

    elif(lable_id=="3"):
        class_name = "cat"

    elif(lable_id=="4"):
        class_name = "deer"

    elif(lable_id=="5"):
        class_name = "dog"

    elif(lable_id=="6"):
        class_name = "frog"

    elif(lable_id=="7"):
        class_name = "horse"

    elif(lable_id=="8"):
        class_name = "ship"

    elif(lable_id=="9"):
        class_name = "truck"

    return class_name

def create_dir(dir_path):
    if not os.path.exists(dir_path):
        print("Create dir = {}".format(dir_path))
        os.makedirs(dir_path)

train_img_num = 0
test_img_num = 0
def visualize_data(binary_img_path_list, folder_name):
    global train_img_num
    global test_img_num
    for item in binary_img_path_list:
        imgX, imgY = load_CIFAR_batch(item)
        print("image [{}] saving...".format(item))
        xx = 0
        for i in xrange(imgX.shape[0]):
            imgs = imgX[i - 1]
            print("imgY = {}".format(imgY[i-1]))
            img0, img1, img2 = imgs[0], imgs[1], imgs[2]
            i0 = Image.fromarray(img0)
            i1 = Image.fromarray(img1)
            i2 = Image.fromarray(img2)
            img = Image.merge("RGB",(i0,i1,i2))


            if(folder_name == "train"):
                name = folder_name + "_" + str(train_img_num) + ".png"
            else:
                name = folder_name + "_" + str(test_img_num) + ".png"

            class_name = get_class_name(str(imgY[i-1]))
            save_path = os.path.join(folder_name, class_name, name)
            create_dir(os.path.join(folder_name, class_name))
            img.save(save_path, "png")

            train_img_num += 1
            test_img_num += 1

            # xx += 1
            # if(xx>10):
               #  break


if __name__ == "__main__":
    # load_CIFAR_Labels("./cifar-10-batches-py/batches.meta")
    
    binary_img_path_list = []
    binary_img_path_list.append("./cifar-10-batches-py/data_batch_1")
    binary_img_path_list.append("./cifar-10-batches-py/data_batch_2")
    binary_img_path_list.append("./cifar-10-batches-py/data_batch_3")
    binary_img_path_list.append("./cifar-10-batches-py/data_batch_4")
    binary_img_path_list.append("./cifar-10-batches-py/data_batch_5")

    visualize_data(binary_img_path_list, "train")

    test_binary_img_path_list = []
    test_binary_img_path_list.append("./cifar-10-batches-py/test_batch")
    visualize_data(test_binary_img_path_list, "validation")




Cifar100

参考网址:

1)数据官网:http://www.cs.toronto.edu/~kriz/cifar.html

2)http://blog.csdn.net/yj3254/article/details/52303800

# -*- coding: utf-8 -*-

import pickle as p
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as plimg
from PIL import Image
import os

def load_CIFAR_batch(filename, folder_name):
    """ load single batch of cifar """
    with open(filename, 'rb')as f:
        datadict = p.load(f)
        """ 
        cifar100 data content: 
            { 
            "coarse_labels":[0,...,19],   # 0~19 super category 
            "filenames":["volcano_s_000012.png",...], 
            "batch_label":"", 
            "fine_labels":[0,1...99]      # 0~99 category 
            } 
        return list of numpy arrays [na,...,na] with specific batch_size 
                na: N dimensional numpy array  
        """  
        # print(datadict.keys())
        ## ['data', 'batch_label', 'fine_labels', 'coarse_labels', 'filenames']

        batch_label = datadict['batch_label']
        fine_labels = datadict['fine_labels']
        coarse_labels = datadict['coarse_labels']
        batch_label = np.array(batch_label)
        fine_labels = np.array(fine_labels)
        coarse_labels = np.array(coarse_labels)

        X = datadict['data']
        # print(X.shape)
        if(folder_name == "train"):
            X = X.reshape(50000, 3, 32, 32)
        elif(folder_name == "validation"):
            X = X.reshape(10000, 3, 32, 32)

        return X, batch_label, fine_labels, coarse_labels

def unpickle(file):  
    import cPickle
    fo = open(file, 'rb')
    dict = cPickle.load(fo)
    fo.close()
    return dict


filename = "./cifar-100-python/meta"
dict_meta_batch = unpickle(filename)

def get_class_name(lable_id):
    
    fine_label_names_list = dict_meta_batch['fine_label_names']
    class_name = fine_label_names_list[lable_id]

    return class_name

def create_dir(dir_path):
    if not os.path.exists(dir_path):
        print("Create dir = {}".format(dir_path))
        os.makedirs(dir_path)

train_img_num = 0
test_img_num = 0
def visualize_data(binary_img_path_list, folder_name):
    global train_img_num
    global test_img_num
    for item in binary_img_path_list:
        # imgX, imgY = load_CIFAR_batch(item)
        imgX, batch_label, fine_labels, coarse_labels = load_CIFAR_batch(item, folder_name)
        print("image [{}] saving...".format(item))
        xx = 0
        for i in xrange(imgX.shape[0]):
            imgs = imgX[i - 1]
            # print("fine_labels = {}".format(fine_labels[i-1]))
            img0, img1, img2 = imgs[0], imgs[1], imgs[2]
            i0 = Image.fromarray(img0)
            i1 = Image.fromarray(img1)
            i2 = Image.fromarray(img2)
            img = Image.merge("RGB",(i0,i1,i2))

            class_name = get_class_name(fine_labels[i-1])
            print("class_name = {}".format(class_name))

            if(folder_name == "train"):
                name = class_name + "_" + str(train_img_num) + ".png"
            else:
                name = class_name + "_" + str(test_img_num) + ".png"

            save_path = os.path.join(folder_name, class_name, name)
            create_dir(os.path.join(folder_name, class_name))
            img.save(save_path, "png")

            train_img_num += 1
            test_img_num += 1

            # xx += 1
            # if(xx>10):
            #     break


if __name__ == "__main__":
    
    binary_img_path_list = []
    binary_img_path_list.append("./cifar-100-python/train")
    visualize_data(binary_img_path_list, "train")

    test_binary_img_path_list = []
    test_binary_img_path_list.append("./cifar-100-python/test")
    visualize_data(test_binary_img_path_list, "validation")



猜你喜欢

转载自blog.csdn.net/Houchaoqun_XMU/article/details/79624329
今日推荐