中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用實例分析pytorch讀取圖像數據如何轉成opencv格式

發布時間:2020-07-20 14:10:04 來源:億速云 閱讀:704 作者:小豬 欄目:開發技術

這篇文章主要用實例分析pytorch讀取圖像數據如何轉成opencv格式,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

pytorch讀取圖像數據轉成opencv格式方法:先轉成numpy通用的格式,再將其轉換成opencv格式。

pytorch讀取的數據使用loaddata這類函數實現。pytorch網絡輸入圖像的格式為(C, H, W),就是(通道數,高,寬)而numpy中圖像的格式為(H,W,C)。

那就將其通道調換一下。用到函數transpose。

轉換方法如下

例如A 的格式為(c,h,w) 那么經過

A = A.transpose(1,2,0)

后就變成了(h,w,c)了

然后用語句

B= cv2.cvtColor(A,cv2.COLOR_RGB2BGR)

結果就變成opencv可用的圖像了。 如果不做transpose轉換,那么得到的圖像是一個1*h大小的圖.......

完整代碼:

變換部分:

一般的pytorch會進行裁剪 放縮 歸一化等操作。例如

transforms = Compose([
      ToTensor(),//將數據除以255加載進來
      Resize(768),//裁剪768*768大小的圖像
      ConvertMaskID(Cityscapes.classes),//與這個事無關不用去管它
      Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])// 歸一化 利用均值方差歸一化
    ])

那么被處理的數據就要反歸一化回來唄

代碼如下:三通道的數據

      image_idx = x[idx].cuda().data.cpu().float().numpy() #經過上面處理的數據 在gpu上給取出來放在cpu上。是個numpy類型
      image_idx[0] = image_idx[0] * std[0] + mean[0]#三個通道分別進行反歸一化...按公式來的
      image_idx[1] = image_idx[1] * std[1] + mean[1]
      image_idx[2] = image_idx[2] * std[2] + mean[2]
      
      image_idx[0][image_idx[0] > 1] = 1#對最大值最小值做次保護
      image_idx[0][image_idx[0] < 0] = 0
      
      image_idx[1][image_idx[1] > 1] = 1
      image_idx[1][image_idx[1] < 0] = 0
      
      image_idx[2][image_idx[2] > 1] = 1
      image_idx[2][image_idx[2] < 0] = 0
      
      image_idx = image_idx.transpose(1,2,0)

      img1 = cv2.cvtColor(image_idx * 255,cv2.COLOR_RGB2BGR)#轉成opencv認識的玩意
      tpath2="dddd/"+"yy0" + str(100 * i + idx) + '.jpg'
      cv2.imwrite(tpath2, img1) 

補充知識:pytorch的tensor,Image,numpy和opencv四種格式的相互轉換

話不多說,先上代碼

# -*- 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格式進行繪圖,展示
tensor1 = torch.randint(0,255,(300,300))
transform1 = transforms.ToPILImage(mode="L")
image1 = transform1(np.uint8(tensor1.numpy())) # Image接受的圖像格式必須為uint8,否則就會報錯
print(tensor1.size())
print(image1)
# image.show()
image1.save("gray.jpg")

# 1.2 Image2tensor tensor格式方便使用torch進行數據增強,也是模型訓練的格式
# 先剪切,再轉為tensor。底層也是PIL實現的
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格式主要用于容易轉換數據格式,也有利于轉為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()) # 會增加一個維度

# 3.1 numpy2opencv openc格式方便畫目標框,圖片上面寫字(Image格式也可以實現,不是很熟悉,,,)
# opencv 讀取出來就是numpy的數據格式
cv2.imshow("img",np.uint8(array1))
# cv2.waitKey()
# cv2.destroyAllWindows()

# 3.2 opencv2numpy
array2 = cv2.imread("./gray.jpg") # 這里使用opencv讀取的是三通道,plt讀取的是單通道。。暫時還沒搞懂
print(array2.shape)
print(array2.dtype)

# 4.1 opecv2Image
image3 = Image.fromarray(array2,mode="RGB")
# image3.show()

# 4.2 Image2opencv
# 這里有兩種方式,一種稍復雜點,但是可以保存數據形狀
array3 = transforms.ToTensor()(image3).numpy()

# Image自帶的屬性,但是會打亂數據為一維
list1 = list(image3.getdata())
print(array3.shape)
print(list1)

看完上述內容,是不是對用實例分析pytorch讀取圖像數據如何轉成opencv格式有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南阳市| 沿河| 鸡西市| 平遥县| 阿拉善盟| 曲沃县| 弋阳县| 淄博市| 白城市| 肥东县| 夏河县| 临沂市| 都兰县| 凤台县| 宝鸡市| 南开区| 内黄县| 威远县| 宁安市| 玉林市| 娱乐| 武川县| 呼玛县| 永安市| 东安县| 仲巴县| 喀什市| 晴隆县| 安多县| 寻乌县| 湖州市| 太谷县| 马龙县| 湖南省| 新民市| 东乌珠穆沁旗| 沛县| 麦盖提县| 鲁甸县| 阿拉善左旗| 星座|