[英]How to convert .npy(numpy) file to .png file where .npy array shape (30,256,256)?
[英]Properly convert png to npy numpy array (Image to Array)
當我生成一個圖像然后從中生成一個 numpy 數組時,原始.npy
文件與新文件不同。 我認為new-array.npy
與original-array.npy
因為它們來自同一個圖像。
例如,我使用了這個 4*4 像素的小圖像:
原始圖像.png
代碼的最后一部分是將.png
轉換為.npy
。 我認為問題出在這里的某個地方。
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
filename = 'image-test'
img = Image.open( filename + '.png' )
data = np.array( img, dtype='uint8' )
np.save( filename + '.npy', data)
# visually testing our output
img_array = np.load(filename + '.npy')
plt.imshow(img_array)
我的簡單算法:
.npy
.png
文件。.png
文件並將其保存回.npy
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
from PIL import Image
####create a matrix of random colors
filename = "original-array"
matrix=np.random.random((4,4,3))
nx,ny,nz=np.shape(matrix)
CXY=np.zeros([ny, nx])
for i in range(ny):
for j in range(nx):
CXY[i,j]=np.max(matrix[j,i,:])
#Save binary data
np.save(filename + '.npy', CXY)
print(filename + " was saved")
#Load npy
img_array = np.load(filename + '.npy')
plt.imshow(img_array)
####Save npy as png
filename = "original-image"
img_name = filename +".png"
matplotlib.image.imsave(img_name, img_array)
print(filename + " was saved")
#### Convert that png back to numpy array
img = Image.open( filename + '.png' )
data = np.array( img, dtype='uint8' )
#Convert the new npy file to png
filename = "new-array"
np.save( filename + '.npy', data)
print(filename + " was saved")
#Load npy
img_array = np.load(filename + '.npy')
filename = "new-image"
#Save as png
img_name = filename +".png"
matplotlib.image.imsave(img_name, img_array)
print(filename + " was saved")
這些文件是不同的,因為數組具有不同的數據類型。
第一次保存數據是在保存數組 CXY 時。 該數組的類型為np.float64
,因為這是np.zeros
返回的默認數據類型。
第二個數組是通過加載原始圖像創建的,而不是保存的 npy 文件。 這是引入不一致的地方,因為 PNG 數據是np.uint8
類型(並在下一行再次轉換為np.uint8
)。 這是一種較小的數據類型,因此整體文件大小較小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.