PHP前端开发

Python怎么对图片进行resize、裁剪、旋转、翻转

百变鹏仔 1个月前 (01-21) #Python
文章标签 图片

    对图片进行resize、裁剪、旋转、翻转

    首先我们的原始图片是10张网上下载尺寸不一的图片,如下:

    操作1:resize 将图片resize到相同尺寸(320,240)

    from PIL import Imageimport torchvision.transforms as transforms#使用PIL库读入图片并进行resizedef ResizeImage():    if not os.path.exists(rdir):        os.makedirs(rdir)    for i in range(10):        im = Image.open(dir+str(i)+".jpg")        im = im.resize((320,240),Image.BILINEAR)  #第一个参数为想要的size,第二个参数为插值方法,双线性插值这里用的是        im.save('{}/{}.jpg'.format(rdir, i))

    操作2:剪裁(包括围绕中心剪裁和随机剪裁)

    #图像随机剪裁和中心剪裁def crop(lib):    for i in range(10):        img = Image.open(lib+"/"+str(i)+".jpg")        CenterCrop = transforms.CenterCrop((240,320))   #中心裁剪        cropped_image = CenterCrop(img)  #PIL.Image.Image        # im=np.array(cropped_image)  #可以将PIL.Image.Image转成ndarry        #cropped_image.show()    #将图片显示        cropped_image.save('{}/cen_crop{}.jpg'.format(rdir, i))        RandomCrop = transforms.RandomCrop(size=(240, 320))  #随机剪裁        random_image = RandomCrop(img)        random_image.save('{}/rand_crop{}.jpg'.format(rdir, i))

    操作3:随机旋转

    #随机旋转def random_rotation(lib):    for i in range(10):        img = Image.open(lib+"/"+str(i)+".jpg")        RR = transforms.RandomRotation(degrees=(10, 80))   #degrees为随机旋转的角度        rr_image = RR(img)        rr_image.save('{}/rand_rotation{}.jpg'.format(rdir, i))

    操作4:翻转

    #图片依概率翻转,p为翻转的概率def horizontal_flip(lib):    for i in range(10):        img = Image.open(lib+"/"+str(i)+".jpg")        HF = transforms.RandomHorizontalFlip(p=1.0)  #p为概率,缺省时默认0.5        hf_image = HF(img)        hf_image.save('{}/hori_flip{}.jpg'.format(rdir, i))

    下面展示一下操作后的图片:

    从上到下每行依次为resize、中心裁剪、翻转、随机裁剪和随机旋转的结果

    立即学习“Python免费学习笔记(深入)”;

    单张图像变换大小——img.resize()

    这个是一段学过的简单程序,可以改变图像的大小,jpg,png都可以的:

    #encoding=utf-8#author: walker#date: 2014-05-15#function: 更改图片尺寸大小from PIL import Image'''filein: 输入图片fileout: 输出图片width: 输出图片宽度height:输出图片高度type:输出图片类型(png, gif, jpeg...)'''def ResizeImage(filein, fileout, width, height, type):  img = Image.open(filein)  out = img.resize((width, height),Image.ANTIALIAS) #resize image with high-quality  out.save(fileout, type)if __name__ == "__main__":  filein = r'0.jpg'  fileout = r'testout.png'  width = 6000  height = 6000  type = 'png'  ResizeImage(filein, fileout, width, height, type)

    这个函数img.resize((width, height),Image.ANTIALIAS)

    第二个参数:

    • Image.NEAREST :低质量

    • Image.BILINEAR:双线性

    • Image.BICUBIC :三次样条插值

    • Image.ANTIALIAS:高质量