将数组3D保存为CSV

时间:2019-01-10 02:55:21

标签: python pandas csv opencv

对不起,我在将数据保存到csv时遇到问题,我要保存的是3d图像数组,我可以保存它,读取csv时会出现问题,因为它保存为字符串,所以我无法读取数据以创建图像,请尝试使用astype(“ uint8”),因为这是我需要的格式,有人需要帮助我如何使用所需的格式保存数据或在恢复数据时更改格式

    new_dt=pd.read_csv('mypic2.csv')

    for x in range(len(a.index)):
        imagess=a.img[x]
        print(imagess)
        cv2.imshow('imagenew', imagess)

2 个答案:

答案 0 :(得分:1)

从这个问题尚不清楚,为什么要使用pandas数据框存储图像。我认为这使事情变得不必要地复杂。您可以改为直接以二进制格式存储numpy数组,并在以后的某个时刻再次加载。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#create an image
imar = np.array([[[1.,0.,1.],[0.,0.,1.],[1.,1.,0.]],
                 [[0.,1.,1.],[0.,1.,1.],[1.,2.,3.]],
                 [[0.,0.,1.],[1.,1.,1.],[1.,0.,0.]]]).transpose()
plt.imsave('pic.png', imar)

#create dataframe

df = pd.DataFrame([[0,""]], columns=["Feature1","Feature2"])

# read the image
im = plt.imread('pic.png')

plt.imshow(im)
plt.show()

#save the image array to binary file
np.save('mypic.npy', im)
# store name of image in dataframe
df.iloc[0,1] = 'mypic.npy'
#save dataframe
df.to_csv("mydf.csv")
del df

#read dataframe from csv
df = pd.read_csv("mydf.csv")
# load the image from binary file, given the path from the Dataframe
new_im= np.load(df["Feature2"][0])
# show the loaded image
plt.imshow(new_im)
plt.show()

答案 1 :(得分:1)

我也不太确定为什么要将图像保存为csv。由于您正在使用opencv,因此为什么不使用与cv2.imwrite兼容的cv2.imshow

保存opencv图像的另一种方法是使用numpy.save,因为opencv图像本质上是np.array

如果必须将其保存在csv中,则可以创建一个数据框,如

          width . height .  0  .  1  . ...
image_1 .   w1  .   h1   .  f0 .  f1 . ...
image_2 .   w2  .   h2   .  f0 .  f1 . ...

其中每行包含图像的宽度和高度,后跟image.flatten()。然后,您可以将脚本修改为

new_dt=pd.read_csv('mypic2.csv')

for x in range(len(dt.index)):
    # recover image's dimension
    width = new_dt.iloc[x,0]
    height = new_dt.iloc[x,1]

    # load image and reshape to original dimension
    images = new_dt.iloc[x,2:].reshape(height, width, -1)
    print(imagess)
    cv2.imshow('imagenew', imagess)