Python批量裁剪图片

铁佛  金牌会员 | 2024-5-15 14:04:47 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 663|帖子 663|积分 1989

​        前两天想要把连续的不同帧的静态图片拼成一个GIF图片,但是原来的图片须要裁剪,而且存在许多张,幸好这么多张的图片裁剪的位置是一样的,于是我便实行用Python优雅地批量裁剪这些图片。
​        首先先容一下Python裁剪照片的原理。代码的输入是图片的地点和两个点的坐标,这两个点的坐标分别表示一个矩形的左上角极点和右下角极点,这个矩形就是你的裁剪地区。
​        写代码前,先引入一下所须要的库。
  1. from PIL import Image, ImageDraw, ImageFont
复制代码
​        那么你一定会有个疑问,怎么确定图片矩形地区的极点位置呢?下面贴出一个在原图像上绘制边界框的代码。
  1. def draw_bbox(image_path, bbox, output_path):
  2.     """
  3.     Draw bounding box on the image.
  4.     Parameters:
  5.         image_path (str): Path to the input image file.
  6.         bbox (tuple): Bounding box coordinates (left, upper, right, lower).
  7.         output_path (str): Path to save the image with bounding box.
  8.     Returns:
  9.         None
  10.     """
  11.     # Open image
  12.     img = Image.open(image_path)
  13.     # Draw bounding box
  14.     draw = ImageDraw.Draw(img)
  15.     draw.rectangle(bbox, outline="red", width=3)
  16.     # Add text with coordinates
  17.     font = ImageFont.truetype("arial.ttf", 20)
  18.     draw.text((bbox[0], bbox[1]), f"{bbox}", fill="red", font=font)
  19.     # Save image with bounding box
  20.     img.save(output_path)
  21. input_image_path = r"F:\Desktop\woman.jpg"
  22. output_image_path = r"F:\Desktop\woman.jpg"
  23. crop_box = (700, 550, 1850, 1000)  # Define crop box (left, upper, right, lower)
  24. draw_bbox(input_image_path, crop_box, output_image_path)
复制代码
​        crop_box(x1, y1, x2, y2),其中左上角极点表示为(x1, y1),右下角极点表示为(x2, y2)。但是你只能通过不断探索crop_box的取值,根据原图像上绘制的边界框,渐渐确定你最后的裁剪地区。下面给出运行draw_bbox代码的可视化例子。

​        用draw_bbox拿到符合的crop_box以后,下面给出裁剪图片的代码。
  1. def crop_image(input_image_path, output_image_path, crop_box):
  2.     """
  3.     Crop an image using the specified crop box.
  4.     Parameters:
  5.         input_image_path (str): Path to the input image file.
  6.         output_image_path (str): Path to save the cropped image.
  7.         crop_box (tuple): Crop box coordinates (left, upper, right, lower).
  8.     Returns:
  9.         None
  10.     """
  11.     # Open image
  12.     img = Image.open(input_image_path)
  13.     # Crop image
  14.     cropped_img = img.crop(crop_box)
  15.     # Save cropped image
  16.     cropped_img.save(output_image_path)
  17.     print("Image cropped and saved successfully.")
复制代码
​        最后给出裁剪以后的可视化例子。

​        假如想要批量裁剪图片的话,就在外面套一个循环就可以了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表