文章目錄
- 圖檔轉化成矩陣
-
- 方法一:
- 方法二:
- 矩陣轉換成圖檔
-
- 錯誤代碼段
- 正确代碼段
圖檔轉化成矩陣
方法一:
使用 PIL 的方法 + img.getdata() 提取資料 + np.array() 的轉換
- 最後得到的結果是個二維數組
from PIL import Image
import numpy as np
'''圖檔轉數組'''
img = Image.open('1.jpg') # 使用 PIL 打開圖檔
data = img.getdata() # 擷取圖檔的資料資訊 class <'ImagingCore'>
data = np.array(data) # 把這個資料通過 numpy 轉換成多元度的張量
print(data)
方法二:
直接用 cv2.imread() 讀出來就是個三維的數組
import cv2
img2 = cv2.imread('1.jpg') # 使用 cv2 來打開圖檔
print(img2)
如果想知道方法一和方法二的差別,可以查閱我的上一篇 opencv 學習文章:
https://blog.csdn.net/qq_42902997/article/details/108326214
矩陣轉換成圖檔
- 産生一個 625 * 625 * 3 的圖檔,先産生 625 * 625 * 3 = 1171875 個像素點
- 将産生的資料通過numpy 進行 resize
- 将處理過的矩陣通過 imwrite 寫成新的圖檔(如果沒有這一步而直接 imshow 會出錯)
錯誤代碼段
data = [random.randint(0,255) for _ in range(1171875)]
data = np.resize(data,(625,625,3))
print(data)
cv2.imshow('img2',data) # 錯誤示範:這裡直接将矩陣是 imshow 不出結果的
cv2.waitKey(0)
正确代碼段
import numpy as np
import cv2
import random
data = [random.randint(0,255) for _ in range(1171875)]
data = np.resize(data,(625,625,3))
print(data)
cv2.imwrite('2.jpg',data)
s = cv2.imread('2.jpg')
cv2.imshow('img2',s)
cv2.waitKey(0)
最後産生了一張這樣的圖:其中像素點的值都在 0-255 之間