1. 程式人生 > 程式設計 >Pytorch 使用opnecv讀入影象由HWC轉為BCHW格式方式

Pytorch 使用opnecv讀入影象由HWC轉為BCHW格式方式

傳統使用opencv自帶的swapaxes進行轉換,然後使用pytorch的from_numpy轉為tensor

例如:

img = img.swapaxes(1,2).swapaxes(0,1)

但是有一個常用的影象增廣模組albumentations模組中的img_to_tensor進行直接轉換

Pytorch 使用opnecv讀入影象由HWC轉為BCHW格式方式

注意:我這裡使用unsqueeze是為了驗證模型的輸出,如果使用pytorch的dataset則不需要使用這個操作

補充知識:pytorch只用中要注意通道問題

cv讀進來的是BGR影象,通道是hcw,在torch中使用要注意維度轉換

def __getitem__(self,idx):
    '''Load image.
    Args:
     idx: (int) image index.
    img_org = Image.open(self.root_src + 'reference_cutBlock' + fname_org)
    Returns:
     img: (tensor) image tensor.
     loc_targets: (tensor) location targets.
     cls_targets: (tensor) class label targets.
    '''
    # Load image
    fname_org = self.fnames[idx]
    img_org = cv2.imread(self.root_src + 'dn_dataset/' + fname_org)
    # img_org = np.asarray(img_org)
 
    coin = np.random.randint(0,50)
    img_dis = skimage.util.random_noise(img_org,mode='gaussian',seed=None,var=(coin / 255.0) ** 2) # add gaussian noise
 
    # img_dis = img_dis[:,:,(2,1,0)] # bgr012 to rgb210
    img_dis = img_dis.transpose([2,1]) # hwc to chw
    img_dis = img_dis[(2,0),:] # bgr012 to rgb210
 
    img_org = img_org[:,0)]/255.0 # bgr012 to rgb210
    img_org = img_org.transpose([2,1]) # hwc to chw
 
    img_dis = torch.from_numpy(img_dis).float()
    img_org = torch.from_numpy(img_org).float()
    # fname_org_dis = self.fnames_dis[idx]
    # img_dis = Image.open(self.root_src + 'distorted_train_block/' + fname_org_dis)
 
    # if img_org.mode != 'RGB':
    #   img_org = img_org.convert('RGB')
    #
    # if img_dis.mode != 'RGB':
    #   img_dis = img_dis.convert('RGB')
    # img_org = self.transform(img_org)
    # img_dis = self.transform(img_dis)
 
    return img_dis,img_org

transforms.ToTensor() 有兩層含義,一個是轉化成Tensor,另一個是進行歸一化,此段程式碼,沒有采用此語句,而是分兩步完成,因為img_dis,已經實現歸一化。

以上這篇Pytorch 使用opnecv讀入影象由HWC轉為BCHW格式方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。