天天看點

Opencv學習之:如何将矩陣轉換成圖檔,如何将圖檔轉換成矩陣圖檔轉化成矩陣矩陣轉換成圖檔

文章目錄

  • 圖檔轉化成矩陣
    • 方法一:
    • 方法二:
  • 矩陣轉換成圖檔
    • 錯誤代碼段
    • 正确代碼段

圖檔轉化成矩陣

方法一:

使用 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)
           
Opencv學習之:如何将矩陣轉換成圖檔,如何将圖檔轉換成矩陣圖檔轉化成矩陣矩陣轉換成圖檔

方法二:

直接用 cv2.imread() 讀出來就是個三維的數組
import cv2
img2 = cv2.imread('1.jpg')  # 使用 cv2 來打開圖檔
print(img2)
           
Opencv學習之:如何将矩陣轉換成圖檔,如何将圖檔轉換成矩陣圖檔轉化成矩陣矩陣轉換成圖檔

如果想知道方法一和方法二的差別,可以查閱我的上一篇 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 之間

Opencv學習之:如何将矩陣轉換成圖檔,如何将圖檔轉換成矩陣圖檔轉化成矩陣矩陣轉換成圖檔
下一篇: HOJ2544