将具有像素值的csv文件转换为图像

自粘

我有一个csv文件,其中每一行都包含图像的像素值。因此,一行的每一列都包含像素值,最后一行除外,后者包含图像的“标签”,例如“外套”,“礼服”,“凉鞋”等字样(注意:第一行)包含列名,而不是图像)。

我希望将这些行读取为图像,并将它们全部保存(最好按标签排序,例如对于每个标签,依次为“ dress1”,“ dress2”,....,“ sandal1”,“ sandal2”等。)四个标签)。

我尝试了以下方法来进行不带标签分类的保存,但出现错误:

import numpy as np
import csv
import matplotlib.pyplot as plt
i=0
with open('myfile.csv', 'r') as csv_file:
      for data in csv.reader(csv_file):
      pixels = data[:]
      pixels = np.array(pixels, dtype='uint8')
      #Reshape the array into 28 x 28 array (As images are 28x28)
      pixels = pixels.reshape((28, 28)) 
      i +=1
      plt.savefig(str(i))

寻找解决此问题的最有效方法。任何输入将不胜感激。谢谢!

简单

如果最后一列中有名称,则必须在没有last元素的情况下进行转换data[:-1]并使用filenamename中的最后一列savefig( data[-1] + str(i) + '.jpg' )没有扩展,它可能不知道要写入哪种类型的图像。

您必须分别计算i每个标签-即 使用字典

i = dict() 
i[label] = 0 

# later 

i[label] += 1 
savefig( label + str(i[label]) + '.jpg' 

您也可以使用PIL/'pillow instead ofmatplotlib`编写它。

from PIL import Image    

image = Image.fromarray(pixels)
image.save(filename)

import numpy as np
import csv
from PIL import Image    

counter = dict()

with open('myfile.csv') as csv_file:
    csv_reader = csv.reader(csv_file)

    # skip headers
    next(csv_reader)

    for row in csv.reader(csv_reader):

        pixels = row[:-1] # without label
        pixels = np.array(pixels, dtype='uint8')
        pixels = pixels.reshape((28, 28))
        image = Image.fromarray(pixels)

        label = row[-1]

        if label not in counter:
            counter[label] = 0
        counter[label] += 1

        filename = '{}{}.jpg'.format(label, counter[label])
        image.save(filename)

        print('saved:', filename)

编辑:示例,其中显示了一行数据,以便那些无需下载csv文件即可对其进行测试的人。

import numpy as np
import csv
from PIL import Image

counter = dict()

row = [
        255,   0,   0,   0,   0,   0,  255,
          0, 255, 255, 255, 255, 255,    0,
          0, 255,   0, 255,   0, 255,    0,
          0, 255, 255, 255, 255, 255,    0,
          0, 255,   0,   0,   0, 255,    0,
          0, 255, 255, 255, 255, 255,    0,
        255,   0,   0,   0,   0,   0,  255,
        'face'
      ]

pixels = row[:-1]

pixels = np.array(pixels, dtype='uint8')
pixels = pixels.reshape((7, 7))
image = Image.fromarray(pixels)

label = row[-1]

if label not in counter:
    counter[label] = 0
counter[label] += 1

filename = '{}{}.png'.format(label, counter[label])

image.save(filename)

print('saved:', filename)

结果face1.png

在此处输入图片说明


编辑:我检查了您的csv文件,像素不是整数值而是浮点(正,负)值,所以您不能使用uint8它必须是float

pixels = np.array(pixels, dtype='float')

您可以将图像转换为RGB或灰度L以保存它

image = image.convert('RGB')
image = image.convert('L')

但似乎无法转换负值。

使用

plt.imsave(filename, pixels)

我得到了预期的结果


import numpy as np
import csv
from PIL import Image    
import matplotlib.pyplot as plt

counter = dict()

with open('gen_image_wgan.csv') as csv_file:
    csv_reader = csv.reader(csv_file)

    # skip headers
    next(csv_reader)

    for row in csv_reader:

        pixels = row[:-1] # without label
        pixels = np.array(pixels, dtype='float')
        pixels = pixels.reshape((28, 28))

        label = row[-1]

        if label not in counter:
            counter[label] = 0
        counter[label] += 1

        filename = '{}{}.png'.format(label, counter[label])
        plt.imsave(filename, pixels)

        print('saved:', filename)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将包含像素值的 csv 文件转换为等效的图像

将图像转换为具有R中坐标和像素值列的数据帧

使用python将图像转换为像素数据帧并转换为csv文件

使用Java(具有多个元素值)将XML文件转换为CSV文件

将图像灰度像素值转换为 alpha 值

如何基于给定的csv文件将像素值转换为另一个值?

如何将灰度图像转换为像素值列表?

使用PyPlot将具有像素值的CSV渲染到图像

如何将具有日期索引和int值元组的csv文件转换为适用于绘图的dict?

将图像中的所有白色像素转换为黑色像素

如何将我的 csv 文件从列值转换为具有其值的新列..?

将具有任何像素格式的位图转换为特定像素格式

使用Jupyter Notebook将具有多个图纸的Excel文件转换为多个csv文件

如何将具有1x1结构的.mat文件转换为.csv文件?

如何将wav文件转换为具有melspectogram的RGB图像?

将具有键值(逗号分隔)的文件转换为仅包含值的文件

具有像素值列表的图像遮罩

将CSV转换为JSON。如何保持具有相同索引的值?

将列中的 CSV 值转换为具有二进制答案的单独列

使用 jq 将仅具有值的 json 数组转换为 csv

将图像转换为CSV

如何将具有不同元素数量的多个列表转换为 csv 文件

如何使用Powershell将具有元数据标题行的CSV文件转换为平面表?

jq:将具有数组的JSON文件转换为CSV-已转置?

将日志数据转换为具有所需格式的csv文件

如何将具有“太多列”的大型 .csv 文件转换为 SQL 数据库

如何将具有简单结构的xml文件转换为csv?

如何使用标签将图像文件转换为CSV

将 RGB 转换为具有正确大小的图像的问题