在人工智能計算機視覺任務中,經常需要對圖像進行預處理操作,比如,在圖像分類任務中,我們需要訓練圖像數據大小一般為:224*224,416*416等,但在實際給的圖像數據大小并不是這樣的大小,所以需要需要經過預處理。而在模型預測推理中,我們還需要把圖像進行歸一化處理。
以下面幾張原始圖像為例,來演示圖像的預處理操作縮放和裁剪,圖像來源于網絡。
500*705
500*335
500*427
500*397
500*427
先把圖像以短邊縮放到224,再以中心裁剪成224*224大小。最後根據需要做歸一化處理。
主要定義三個函數:
1、根據短邊縮放:ResizeByShort
2、中心裁剪:CenterCrop
3、歸一化:Normalize
實現代碼
import cv2
import numpy as np
import os
#根據短邊縮放
def ResizeByShort(img,size=224):
shortsize=min(img.shape[0],img.shape[1]) #取短邊
scale=size/shortsize #縮放比
#計算縮放後的寬度
w=int(img.shape[1]*scale)
h=int(img.shape[0]*scale)
img=cv2.resize(img,(w,h))
return img
#中心裁剪正方形
def CenterCrop(img,size):
h,w=img.shape[:2]
w0=(w-size)//2
h0=(h-size)//2
img=img[h0:h0 size,w0:w0 size]
return img
#歸一化操作,HWC=>NCWH
mean=[0.485, 0.456, 0.406]
std=[0.229, 0.224, 0.225]
def Normalize(img,mean,std):
img=img.astype(np.float32)/255.
#BGR>RGB
img=img[:,:,::-1]
mean=np.array(mean).reshape(1,1,3).astype(np.float32)
std=np.array(std).reshape(1,1,3).astype(np.flat32)
img=(img-mean)/std
# img=np.expand_dims(img,axis=0)
# img=np.transpose(img,(0,3,1,2))
return img
imgnamelst=["7.jpg","16.jpg","80.jpg","104.jpg","d117.jpg"]
imglst=[]
for imgname in imgnamelst:
fimg=os.path.join("img",imgname)
img=cv2.imread(fimg)
#根據短邊縮放
img=ResizeByShort(img,224)
#中心裁剪
img=CenterCrop(img,224)
imglst.append(img)
imgres=np.hstack(imglst) #圖像拼接起來
#print(img.shape)
cv2.imshow("img",imgres)
cv2.waitKey(0)
cv2.destroyAllWindows()
5*(224*224)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!