Converting images to csv file in python

前端 未结 4 1518
耶瑟儿~
耶瑟儿~ 2020-12-03 12:51

I have converted my image into a csv file and it\'s like a matrix but I want it to be a single row. How can I convert all of the images in dataset into a csv file (each ima

相关标签:
4条回答
  • 2020-12-03 13:18
    import numpy as np
    import cv2
    import os
    
    IMG_DIR = '/home/kushal/Documents/opencv_tutorials/image_reading/dataset'
    
    for img in os.listdir(IMG_DIR):
            img_array = cv2.imread(os.path.join(IMG_DIR,img), cv2.IMREAD_GRAYSCALE)
    
            img_array = (img_array.flatten())
    
            img_array  = img_array.reshape(-1, 1).T
    
            print(img_array)
    
            with open('output.csv', 'ab') as f:
    
                np.savetxt(f, img_array, delimiter=",")
    
    0 讨论(0)
  • 2020-12-03 13:25

    From your question, I think you want to know about numpy.flatten(). You want to add

    value = value.flatten()
    

    right before your np.savetxt call. It will flatten the array to only one dimension and it should then print out as a single line.

    The rest of your question is unclear bit it implies you have a directory full of jpeg images and you want a way to read through them all. So first, get a file list:

    def createFileList(myDir, format='.jpg'):
    fileList = []
    print(myDir)
    for root, dirs, files in os.walk(myDir, topdown=False):
        for name in files:
            if name.endswith(format):
                fullName = os.path.join(root, name)
                fileList.append(fullName)
    return fileList
    

    The surround your code with a for fileName in fileList:

    Edited to add complete example Note that I've used csv writer and changed your float64 to ints (which should be ok as pixel data is 0-255

    from PIL import Image
    import numpy as np
    import sys
    import os
    import csv
    
    #Useful function
    def createFileList(myDir, format='.jpg'):
    fileList = []
    print(myDir)
    for root, dirs, files in os.walk(myDir, topdown=False):
        for name in files:
            if name.endswith(format):
                fullName = os.path.join(root, name)
                fileList.append(fullName)
    return fileList
    
    # load the original image
    myFileList = createFileList('path/to/directory/')
    
    for file in myFileList:
        print(file)
        img_file = Image.open(file)
        # img_file.show()
    
        # get original image parameters...
        width, height = img_file.size
        format = img_file.format
        mode = img_file.mode
    
        # Make image Greyscale
        img_grey = img_file.convert('L')
        #img_grey.save('result.png')
        #img_grey.show()
    
        # Save Greyscale values
        value = np.asarray(img_grey.getdata(), dtype=np.int).reshape((img_grey.size[1], img_grey.size[0]))
        value = value.flatten()
        print(value)
        with open("img_pixels.csv", 'a') as f:
            writer = csv.writer(f)
            writer.writerow(value)
    
    0 讨论(0)
  • 2020-12-03 13:26
    import os
    import pandas as pd
    
    path = 'path-to-the-folder'
    os.chdir(path)
    lists = os.listdir(path)
    labels = []
    file_lst = []
    
    for folder in lists:
        files = os.listdir(path +"/"+folder)
        for file in files:
          path_file = path + "/" + folder + "/" + file
          file_lst.append(path_file)
          labels.append(folder)
    
    dictP_n = {"path": file_lst,
               "label_name": labels,
              "label": labels}   
    
    data  = pd.DataFrame(dictP_n, index = None)
    data = data.sample(frac=1)
    data['label'] = data['label'].replace({"class1": 0, "class2": 1 })
    data.to_csv("path-to-save-location//file_name.csv", index =None)
    
    0 讨论(0)
  • 2020-12-03 13:31

    How about you convert your images to 2D numpy arrays and then write them as txt files with .csv extensions and , as delimiters?

    Maybe you could use a code like following:

    np.savetxt('np.csv', image, delimiter=',')
    
    0 讨论(0)
提交回复
热议问题