微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将图像保存为文件中的 numpy 数组,并使用 Python 从文件中将其作为图像加载回来

如何解决将图像保存为文件中的 numpy 数组,并使用 Python 从文件中将其作为图像加载回来

我正在尝试将图像转换为 numpy 数组并将其另存为文本/csv 文件。然后我尝试将 text/csv 文件内容加载回图像中。

在整个过程中,维度、数据类型的像素值不能改变,以便准确地重建原始图像(不失真)。

到目前为止我所拥有的-

testim = cv2.imread('img.jpg') #reading the input image

numpyimg = np.array(testim) # Saving as a numpy array

# Checking the shape and image
cv2_imshow(numpyimg)
print(numpyimg.shape)

# Trying to save in csv
for i in numpyimg:
  np.savetxt(fname="image_array.csv",delimiter=",",X=i)

# Check generated csv file after loading it

image_array = np.loadtxt(
    fname="image_array.csv","
)

print("NumPy array: \n",image_array)
print("Shape: ",image_array.shape)
print("Data Type: ",image_array.dtype.name)

当我打印保存文件内容时,我看到了什么 -

NumPy array that I Could saved in a file: 
 [[ 70. 176. 153.]
 [ 63. 170. 144.]
 [ 57. 167. 139.]
 ...
 [ 69. 118.  80.]
 [ 67. 117.  77.]
 [ 64. 114.  74.]]
Shape:  (1040,3)

原图的数组虽然-

array([[[ 78,120,165],[ 63,105,150],[ 48,91,134],...,[ 22,80,51],[ 35,62],[ 49,76]],[[ 77,122,160],[ 62,109,147],[ 50,95,132],[ 24,84,54],[ 29,87,58],[ 38,96,67]],[[ 73,124,[ 66,143],116,137],[ 28,90,60],[ 26,86,56],[ 27,57]],[ 69,118,80],[ 67,117,77],[ 64,114,74]]],dtype=uint8)
shape: (780,1040,3)

这些看起来不太一样,我不明白出了什么问题。

有没有更简单、更准确的方法解决这个问题?

我已经坚持了很长时间。任何帮助表示赞赏!

解决方法

这些看起来不太一样,我不明白出了什么问题。

表示彩色图像 OpenCV 使用三维数组。要访问单个值,您必须提供 3:Y 坐标、X 坐标、哪个颜色通道(0 表示 Blue1 表示 Green >,2 表示 Red,如果我没记错 OpenCV 约定的话。

text/csv 非常适合表示 2D 数据(想想电子表格),但如果您希望有更多维度,则需要在写入之前和读取之后进行特殊处理。 RFC4180 不提供与列内容类型相关的任何功能。

,

Have you focused on the size of both arrays?

这是 CSV 文件的大小 = (1040,3)。

原始图片的大小 = (780,1040,3).

尝试在任何操作之前将图像从 RGB 转换为灰度:

 cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
,

经过多次反复试验,我找到了解决方案。这就是帮助我解决问题的原因-

from PIL import Image

# Create an empty text file before this step
with open('image_array.txt','w') as outfile:
    for slice_2d in numpyimg:
        np.savetxt(outfile,slice_2d)

new_data = np.loadtxt('image_array.txt')

new_data=new_data.reshape((780,3))

img = Image.fromarray(new_data.astype(np.uint8),'RGB')
img.save('try.jpg')
img.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?