在python中将图像转换为csv文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/49070242/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 18:58:29  来源:igfitidea点击:

Converting images to csv file in python

pythonimagecsv

提问by Nebula

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 image into one line).

我已将图像转换为 csv 文件,它就像一个矩阵,但我希望它是一行。如何将数据集中的所有图像转换为 csv 文件(每个图像为一行)。

Here's the code I've used:

这是我使用的代码:

from PIL import Image
import numpy as np
import os, os.path, time

format='.jpg'
myDir = "Lotus1"
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

fileList = createFileList(myDir)
fileFormat='.jpg'
for fileFormat in fileList:
 format = '.jpg'
 # get original image parameters...
 width, height = fileList.size
 format = fileList.format
 mode = fileList.mode
 # Make image Greyscale
 img_grey = fileList.convert('L')
 # Save Greyscale values
 value = np.asarray(fileList.getdata(),dtype=np.float64).reshape((fileList.size[1],fileList.size[0]))
 np.savetxt("img_pixels.csv", value, delimiter=',')

input : http://uupload.ir/files/pto0_lotus1_1.jpg

输入:http: //uupload.ir/files/pto0_lotus1_1.jpg

output:http://uupload.ir/files/huwh_output.png

输出:http: //uupload.ir/files/huwh_output.png

回答by Pam

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

从你的问题来看,我想你想了解numpy.flatten(). 你想添加

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.

就在您的 np.savetxt 调用之前。它会将数组展平为仅一维,然后应将其打印为单行。

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:

您的问题的其余部分不清楚,这意味着您有一个充满 jpeg 图像的目录,并且您想要一种方法来通读它们。首先,获取文件列表:

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:

用一个包围你的代码 for fileName in fileList:

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

编辑以添加完整示例请注意,我使用了 csv writer 并将您的 float64 更改为 ints(这应该没问题,因为像素数据为 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)

回答by 3yanlis1bos

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

您如何将图像转换为 2D numpy 数组,然后将它们写为.csv扩展名和,作为分隔符的txt 文件?

Maybe you could use a code like following:

也许您可以使用如下代码:

np.savetxt('np.csv', image, delimiter=',')

回答by k.dhakal

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=",")

回答by Shivam Dixit

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)