在人工智能计算机视觉任务中,经常需要对图像进行预处理操作,比如,在图像分类任务中,我们需要训练图像数据大小一般为:224*224,416*416等,但在实际给的图像数据大小并不是这样的大小,所以需要需要经过预处理。而在模型预测推理中,我们还需要把图像进行归一化处理。以下面几张原始图像为例,来演示图像的预处理操作缩放和裁剪,图像来源于网络。500*705500*335500*427500*397500*427先把图像以短边缩放到224,再以中心裁剪成224*224大小。最后根据需要做归一化处理。

在人工智能计算机视觉任务中,经常需要对图像进行预处理操作,比如,在图像分类任务中,我们需要训练图像数据大小一般为:224*224,416*416等,但在实际给的图像数据大小并不是这样的大小,所以需要需要经过预处理。而在模型预测推理中,我们还需要把图像进行归一化处理。
以下面几张原始图像为例,来演示图像的预处理操作缩放和裁剪,图像来源于网络。
500*705
500*335
500*427
500*397
500*427
先把图像以短边缩放到224,再以中心裁剪成224*224大小。最后根据需要做归一化处理。
主要定义三个函数:
1、根据短边缩放:ResizeByShort
2、中心裁剪:CenterCrop
3、归一化:Normalize
实现代码import cv2import numpy as npimport 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)//2h0=(h-size)//2img=img[h0:h0 size,w0:w0 size]return img#归一化操作,HWC=>NCWHmean=[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>RGBimg=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 imgimgnamelst=["7.jpg","16.jpg","80.jpg","104.jpg","d117.jpg"]imglst=[]for imgnamein 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)
