一、影像基本處理以及資料集的簡單創建
初次接觸pytorch,配置環境還是比較麻煩的,主要是用到anaconda
下面是對影像處理的基本操作
from PIL import Image # 影像處理的庫
img_path = r'D://情緒圖片測驗/path1.jpg' # 圖片路徑
img = Image.open(img_path) # 呼叫方法,打開該影像
print(img.size) # 輸出該影像的尺寸
img.show() # 顯示資料集
這是將目的地址的圖片形成串列
import os
dir_path = r'D://情緒圖片測驗5張' # 目的地址
img_path_list = os.listdir(dir_path) # 運用os庫將目的地址里面的圖片放在一個串列里面
print(img_path_list[0]) # 測驗 輸出list【0】
下面來創建一個類,主要包含三種函式
class MyData(Dataset):
def __init__(self, root_dir, label_dir): # 初始化類,為class提供全域變數
def __getitem__(self, idx): # 獲取串列中每一個圖片
def __len__(self): # 回傳長度
一個一個看,來看第一個初始化值
def __init__(self, root_dir, label_dir): # 初始化類,為class提供全域變數
self.root_dir = root_dir # 根檔案位置
self.label_dir = label_dir # 子檔案名
self.path = os.path.join(self.root_dir, self.label_dir) # 合并,即具體位置
self.img_path = os.listdir(self.path) # 轉換成串列的形式
這邊的self其實就類似于C++的指標,是為了將它變成全域變數
來看第二個獲取圖片
def __getitem__(self, idx): # 獲取串列中每一個圖片
img_name = self.img_path[idx] # idx表示下標,即對應位置
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name) # 每一個圖片的位置
img = Image.open(img_item_path) # 呼叫方法,拿到該影像
label = self.label_dir # 標簽
return img, label # 回傳img 圖片 label 標簽
這邊回傳的值有兩個,一個是img圖片的資訊,一個是label標簽,在下面呼叫的時候會用到
下面是第三部分獲取長度,這部分比較簡單,就是一個len()
def __len__(self): # 回傳長度
return len(self.img_path)
下面看完整的類以及呼叫測驗
# -*- coding = utf-8 -*-
from torch.utils.data import Dataset
import cv2
from PIL import Image # 影像處理的庫
import os
'''
img_path = r'D://情緒圖片測驗/path1.jpg' # 圖片路徑
img = Image.open(img_path) # 呼叫方法,打開該影像
print(img.size) # 輸出該影像的尺寸
img.show() # 顯示資料集
'''
'''
dir_path = r'D://情緒圖片測驗5張' # 目的地址
img_path_list = os.listdir(dir_path) # 運用os庫將目的地址里面的圖片放在一個串列里面
print(img_path_list) # 測驗 輸出list【0】
'''
class MyData(Dataset):
def __init__(self, root_dir, label_dir): # 初始化類,為class提供全域變數
self.root_dir = root_dir # 根檔案位置
self.label_dir = label_dir # 子檔案名
self.path = os.path.join(self.root_dir, self.label_dir) # 合并,即具體位置
self.img_path = os.listdir(self.path) # 轉換成串列的形式
def __getitem__(self, idx): # 獲取串列中每一個圖片
img_name = self.img_path[idx] # idx表示下標,即對應位置
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name) # 每一個圖片的位置
img = Image.open(img_item_path) # 呼叫方法,拿到該影像
label = self.label_dir # 標簽
return img, label # 回傳img 圖片 label 標簽
def __len__(self): # 回傳長度
return len(self.img_path)
root_dir = 'D://情緒圖片測驗5張' # 根目錄
happy_label_dir = '開心' # 子目錄
happy_dataset = MyData(root_dir, happy_label_dir) # 開心資料集創建完成
img, label = happy_dataset[2] # 由上面可知回傳的是兩個值
print(label) # 分別呼叫
img.show()
各行代碼的意思解釋以及給大家注釋了,還有不明白的地方歡迎留言私信哦
這里的D://情緒圖片5張是我自己創建的檔案夾,開心是根檔案下的子檔案,資料集(就是里面的圖片)是通過爬蟲獲取的,關于爬蟲的相關知識可以看我的第一篇文章哦~
來看結果

二、總結
這次主要是學習了一些影像操作的庫以及資料集的簡單創建,為日后訓練做準備,初次學習,歡迎大家批評指正哦~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402574.html
標籤:其他
