Извините, у меня есть проблема с сохранением данных в CSV, я хочу сохранить трехмерный массив изображений, я мог бы сохранить его, проблема возникает при чтении 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)
Я также не уверен, почему вы хотите сохранить изображение в формате 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 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)
Из вопроса, почему вы хотите использовать кадры данных Pandas для хранения изображения, не ясно. Я думаю, что это делает вещи излишне сложными. Вместо этого вы можете напрямую сохранить массив в двоичном формате и через некоторое время загрузить его снова.
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()