利用Python实现批量裁剪图片
作者:Python 集中营
本文旨在介绍基于Python如何批量裁剪图片并保存,主要内容包括以下几个方面:
裁剪图片的原理与方法、Python中用于裁剪图片的库、代码实现过程以及批量裁剪图片的实际案例等。
一、裁剪图片的原理与方法
图片裁剪是指将一张图片中的某一部分选中并保存,通常用于将图片缩小或者只选取图片中的部分内容。
具体来看,图片裁剪的过程大致包括以下几个步骤:
1.选定裁剪区域。
需要确定需要裁剪的区域,以一定的方式选定区域的位置和大小。
2.选定裁剪方式。
需要确定使用何种方式对图片进行裁剪,例如按照比例缩放、按照像素大小裁剪、按照像素位置裁剪等。
3.裁剪图片并保存。
使用选定的裁剪方式对图片进行裁剪,并将裁剪后的图片保存到指定的位置。
针对以上步骤,Python中有许多用于裁剪图片的库可以使用,下面将分别介绍。
二、Python中用于裁剪图片的库
1.Pillow库
Pillow是Python的一个图像处理库,提供了许多图像处理操作,其中也包括图片裁剪。
使用Pillow裁剪图片的代码示例如下:
from PIL import Image # 打开图片image,并裁剪出左上角为(0,0),右下角为 (100, 100) 的矩形区域 image = Image.open("image.jpg") rect = (0, 0, 100, 100) crop_image = image.crop(rect) crop_image.show()
以上代码首先使用Pillow库中的Image模块打开了一张名为“image.jpg”的图片。
然后使用crop()方法对该图片进行裁剪,裁剪出左上角为(0,0),右下角为(100,100)的矩形区域。
并将该区域保存到变量crop_image中,最后使用show()方法展示裁剪后的图片。
2.opencv-python库
OpenCV是一个广泛应用于计算机视觉领域的开源计算机视觉库。
它拥有一系列用于图像处理和计算机视觉的函数、类和工具,并提供了Python的接口。
使用opencv-python库裁剪图片的代码示例如下:
import cv2 # 打开图片image,并裁剪出左上角为(0,0),右下角为 (100, 100) 的矩形区域 image = cv2.imread("image.jpg") rect = (0, 0, 100, 100) crop_image = image[rect[1]:rect[3], rect[0]:rect[2]] cv2.imshow("crop_image", crop_image) cv2.waitKey(0) cv2.destroyAllWindows()
以上代码首先使用opencv-python库中的imread()方法打开了一张名为“image.jpg”的图片。
然后使用数组索引对该图片进行裁剪,裁剪出左上角为(0,0),右下角为(100,100)的矩形区域。
并将该区域保存到变量crop_image中,最后使用imshow()方法展示裁剪后的图片。
三、代码实现过程
在介绍代码实现过程之前,需要先安装Python的图像处理库Pillow。
在安装Pillow库之前,需要确保已安装Python版本不低于Python3.7。
安装Pillow库的命令为:
pip install Pillow
安装完成之后,就可以使用Pillow库中的Image模块进行图片裁剪操作。
具体实现步骤如下:
导入Pillow库中的Image模块
from PIL import Image
打开需要裁剪的图片,并设置需要裁剪的区域
image_path = "image.jpg" image = Image.open(image_path) rect = (0, 0, 100, 100)
对图片进行裁剪,并保存到指定路径
crop_image = image.crop(rect) crop_image.save("crop_image.jpg")
完整的Python裁剪图片代码示例如下:
from PIL import Image image_path = "image.jpg" image = Image.open(image_path) rect = (0, 0, 100, 100) crop_image = image.crop(rect) crop_image.save("crop_image.jpg")
以上代码首先使用Pillow库中的Image模块打开了一张名为“image.jpg”的图片。
然后使用crop()方法对该图片进行裁剪,裁剪出左上角为(0,0)。
右下角为(100,100)的矩形区域,并将该区域保存到名为“crop_image.jpg”的文件中。
四、批量裁剪图片案例
批量裁剪图片是指同时对指定路径下所有图片进行裁剪操作。
具体实现过程与单张图片裁剪相似,只需要在代码中对指定路径下的所有图片进行循环即可。
下面是一个这样的实际案例:
需求:批量将指定文件夹下所有图片的左上角裁剪为正方形并保存。
确定裁剪区域
裁剪的区域为左上角正方形,大小为图片中宽度和高度中小的那个值。
def get_rect(image): width, height = image.size size = min(width, height) rect = (0, 0, size, size) return rect
以上代码中,get_rect()函数接收一张PIL格式的图片作为参数,获取该图片的宽度和高度,并计算出左上角正方形的大小。
最后将左上角正方形的坐标和大小封装成一个元组并返回。
批量裁剪图片并保存
对所有图片进行循环裁剪,并将裁剪后的图片保存在指定路径下。
import os def crop_images(root_path, save_path): images = os.listdir(root_path) for image_name in images: if image_name.endswith(".jpg") or image_name.endswith(".png"): image_path = os.path.join(root_path, image_name) image = Image.open(image_path) rect = get_rect(image) crop_image = image.crop(rect) crop_image.save(os.path.join(save_path, image_name))
以上代码中,crop_images()函数接收两个参数,root_path表示需要裁剪图片的文件夹路径,save_path表示裁剪后保存的文件夹路径。
首先使用os.listdir()方法获取root_path文件夹下的所有文件和文件夹名,并对所有文件进行循环。
如果文件名以“.jpg”或“.png”结尾,则认为该文件是图片文件,获取该文件的完整路径并打开该图片。
然后调用get_rect()函数获取该图片需要裁剪的区域,使用crop()方法进行裁剪,并将裁剪后的图片保存到指定路径下。
完整的Python批量裁剪图片代码示例如下:
from PIL import Image import os def get_rect(image): width, height = image.size size = min(width, height) rect = (0, 0, size, size) return rect def crop_images(root_path, save_path): images = os.listdir(root_path) for image_name in images: if image_name.endswith(".jpg") or image_name.endswith(".png"): image_path = os.path.join(root_path, image_name) image = Image.open(image_path) rect = get_rect(image) crop_image = image.crop(rect) crop_image.save(os.path.join(save_path, image_name)) root_path = "images" save_path = "cropped_images" crop_images(root_path, save_path)
以上代码假设存在一个名为“images”的文件夹,其中包含需要裁剪的所有图片,裁剪结果将保存到名为“cropped_images”的文件夹下。
五、总结
本文详细介绍了Python如何通过Pillow库对单张或批量图片进行裁剪操作,通过实际案例演示了批量裁剪图片的具体实现过程。
掌握了这些知识,我们可以更加轻松地对大量图片进行批量处理,节省时间和精力。
当然,图片裁剪只是图像处理的冰山一角,希望通过本文的介绍可以为读者提供更多启发,更好地掌握Python图像处理的技巧和方法。
到此这篇关于利用Python实现批量裁剪图片的文章就介绍到这了,更多相关Python裁剪图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!