簡體   English   中英

正確將 png 轉換為 npy numpy 數組(圖像到數組)

[英]Properly convert png to npy numpy array (Image to Array)

當我生成一個圖像然后從中生成一個 numpy 數組時,原始.npy文件與新文件不同。 我認為new-array.npyoriginal-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) 

我的簡單算法:

  1. 生成隨機 rgb 數組並將其保存為.npy
  2. 從該 numpy 數組中保存一個.png文件。
  3. 加載該.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")

結果如下: 在此處輸入圖片說明

當我從new-array.npy重新生成圖像時,我得到與original-image.png完全相同的圖像:
在此處輸入圖片說明

這些文件是不同的,因為數組具有不同的數據類型。

第一次保存數據是在保存數組 CXY 時。 該數組的類型為np.float64 ,因為這是np.zeros返回的默認數據類型。

第二個數組是通過加載原始圖像創建的,而不是保存的 npy 文件。 這是引入不一致的地方,因為 PNG 數據是np.uint8類型(並在下一行再次轉換為np.uint8 )。 這是一種較小的數據類型,因此整體文件大小較小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM