iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

昨天介紹了 pytorch 的基本單元 tensor,那麼我們要如何應用現實中的資料呢?可以思考一下,我們平常用了哪些器官來認知這個世界呢?有眼睛、耳朵、肌膚等。

攝影機就像是電腦的眼睛,透過圖片、影片或串流的方式把現實的畫面記錄到電腦中,今天我們就用最基本的圖片作為範例,我隨手拍了一張滑鼠的照片來當作範例如下圖:

https://ithelp.ithome.com.tw/upload/images/20230914/201535038HTnaaMzha.png

先安裝處理影像的函式庫 OpenCV,輸入以下指令來安裝:

pip install opencv-python

接著要引用 OpenCV 的函式庫,程式碼如下(OpenCV 會使用到 NumPy 的陣列):

import numpy as np
import cv2

題外話,為什麼叫做 cv2 呢?原因是 OpenCV 原本用 C 語言開發,後來改成 C++語言,因此就把 C 語言開發的稱 OpenCV1,改由 C++ 後開發的皆稱為 OpenCV2

讀取一般的圖片檔,只要呼叫 cv2.imread 即可將圖片讀取進來,OpenCV 讀取預設是 BGR,PyTorch 使用 RGB 顏色空間,因此透過 cv2.cvtColor 來轉換:

# 讀取圖檔
img = cv2.imread('Day9/real_img.png')
# BGR 轉 RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
# 查看型態
type(img)

https://ithelp.ithome.com.tw/upload/images/20230914/20153503TsbcFQuI6Y.png

讀取後為有三個軸的物件,分別為空間軸(高度、寬度)和色彩通道(彩色為RGB),使用以下程式碼來查看:

img.shape

我拍的照片為 480 x 640的照片,因此會顯示以下數值(位置要特別注意):

https://ithelp.ithome.com.tw/upload/images/20230914/20153503lreSxPreEu.png

調整各軸的順序

Pytorch 要求圖片資料張量的軸為 C(色彩通道) x H(高度) x W(寬度),因此可以利用 permute() 函式來調整張量內部軸的排列

import torch
img = torch.from_numpy(img) # 將 numpy array 轉成 tensor
out = img.permute(2, 0, 1) # 將第2軸移到第0軸,原本的 0 軸和 1 軸往後移
out.shape # 顯示調整後的順序

https://ithelp.ithome.com.tw/upload/images/20230914/20153503bycDbeI6ac.png

使用 torchvision 中的 to_pil_image 方法將圖片顯示出來

from torchvision.transforms import functional as F
F.to_pil_image(out)

https://ithelp.ithome.com.tw/upload/images/20230914/20153503iTlfqvByAJ.png

結語

今天介紹如何讀取單張圖片並轉換成 tensor 的格式,特別需要注意的是每個函式要求的 Channel, Height, Width 不同,明天會介紹如何一次讀取多張照片。


上一篇
Day8 深度學習常提到的張量是什麼?
下一篇
Day 10 關於貓咪和兔子傻傻分不清那件事
系列文
30天把AI知識傳授給女友30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言