話不多說约急,先上代碼
# -*- coding: utf-8 -*-
# @Time : 2019/4/28 13:52
# @Author : ljf
import torch
from torchvision import transforms
from PIL import Image
import numpy as np
import cv2
# 1.1 tensor2Image Image格式進(jìn)行繪圖零远,展示
tensor1 = torch.randint(0,255,(300,300))
transform1 = transforms.ToPILImage(mode="L")
image1 = transform1(np.uint8(tensor1.numpy())) # Image接受的圖像格式必須為uint8,否則就會(huì)報(bào)錯(cuò)
print(tensor1.size())
print(image1)
# image.show()
image1.save("gray.jpg")
# 1.2 Image2tensor tensor格式方便使用torch進(jìn)行數(shù)據(jù)增強(qiáng)厌蔽,也是模型訓(xùn)練的格式
# 先剪切牵辣,再轉(zhuǎn)為tensor。底層也是PIL實(shí)現(xiàn)的
transform2 = transforms.Compose([transforms.RandomCrop([200,200],padding=10),transforms.ToTensor()])
image2 = Image.open("gray.jpg")
tensor2 = transform2(image2)
print(tensor2.size())
# 2.1 tensor2numpy 再1.1中也用到了奴饮,numpy格式主要用于容易轉(zhuǎn)換數(shù)據(jù)格式服猪,也有利于轉(zhuǎn)為opencv格式供填。
array1 = tensor1.numpy()
print(array1.shape)
print(array1.dtype)
# 2.2 numpy2tensor 1.2有介紹,不再贅述
tensor3 = torch.Tensor(array1)
tensor4 = transforms.ToTensor()(array1)
print(tensor3.size())
print(tensor4.size()) # 會(huì)增加一個(gè)維度
# 3.1 numpy2opencv openc格式方便畫目標(biāo)框罢猪,圖片上面寫字(Image格式也可以實(shí)現(xiàn)近她,不是很熟悉,膳帕,粘捎,)
# opencv 讀取出來就是numpy的數(shù)據(jù)格式
cv2.imshow("img",np.uint8(array1))
# cv2.waitKey()
# cv2.destroyAllWindows()
# 3.2 opencv2numpy
array2 = cv2.imread("./gray.jpg") # 這里使用opencv讀取的是三通道,plt讀取的是單通道危彩。攒磨。暫時(shí)還沒搞懂
print(array2.shape)
print(array2.dtype)
# 4.1 opecv2Image
image3 = Image.fromarray(array2,mode="RGB")
# image3.show()
# 4.2 Image2opencv
# 這里有兩種方式,一種稍復(fù)雜點(diǎn)汤徽,但是可以保存數(shù)據(jù)形狀
array3 = transforms.ToTensor()(image3).numpy()
# Image自帶的屬性娩缰,但是會(huì)打亂數(shù)據(jù)為一維
list1 = list(image3.getdata())
print(array3.shape)
print(list1)
回校寫論文十天,基本沒更新博客谒府。拼坎。。完疫。
上面的四種格式轉(zhuǎn)換時(shí)在做一個(gè)“圖像分類”的項(xiàng)目經(jīng)常用到的泰鸡,比如保存圖片,圖片上面加中文等等壳鹤。因?yàn)檫@些代碼不是很常用盛龄,不熟練,所以每次都要在網(wǎng)上找下芳誓。這個(gè)博文也方便我來查找余舶,大家有需要的也可以進(jìn)行保存。
后續(xù)更新解決opecv锹淌,matplotlib顯示中文問題匿值,以及分類模型中加入評(píng)價(jià)指標(biāo)confusion matrix
歡迎大家留言批評(píng)指正