147.Python——图像预处理操作:缩放和裁剪

在人工智能计算机视觉任务中,经常需要对图像进行预处理操作,比如,在图像分类任务中,我们需要训练图像数据大小一般为:224*224,416*416等,但在实际给的图像数据大小并不是这样的大小,所以需要需要经过预处理。而在模型预测推理中,我们还需要把图像进行归一化处理。

以下面几张原始图像为例,来演示图像的预处理操作缩放和裁剪,图像来源于网络。

先把图像以短边缩放到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()

运行结果

相关文章

Python 4种方法对不同数量级数据归一化

在机器学习和数据处理过程中,对不同数量级的数据进行归一化是一项重要的预处理步骤。归一化可以将数据缩放到同一范围,避免某些特征因数值较大而主导模型训练。Python 提供了多种方法对数据进行归一化,以下...

怎样用Python进行数据转换和归一化

怎样用Python进行数据转换和归一化 1、概述 实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据...

提升数据质量的秘密武器:最小-最大归一化全揭秘

最小-最大归一化(Min-Max Normalization)是一种常见的数据预处理技术,用于将特征数据缩放到一个固定的范围(通常是[0, 1])。这种归一化方法通过将数据按比例缩放,使得数据集的最小...

python对音频的处理

首先,我们需要 import 几个工具包,一个是 python 标准库中的 wave 模块,用于音频处理操作,另外两个是 numpy 和 matplot,提供数据处理函数一:读取本地音频数据处理音频第...

再见了,Python~

这几天,很多同学问到,关于Python数据分析方面的操作。用起来头疼,需要不断的查询。所以,今天给大家总结了100个最最核心的操作。如果再遇到问题,这里直接查看,超级方便,基本日常使用的都有了~需要本...

在Python中将函数作为参数传入另一个函数中

在我们的Python学习中,我们学到的众多令人瞠目结舌的事实之一是,你可以将函数传入其他函数。你可以来回传递函数,因为在Python中,函数是对象。在使用Python的第一周,你可能不需要了解这些,但...