当前位置:   article > 正文

尽可能不重叠的批量切割图像并保存【Python】_python批量裁剪图片并保存

python批量裁剪图片并保存

有时候,我们需要将一张大图分割成多个小图。网上提供了大量方法,但是这些方法大多只能让你保证小块之间不重叠,或者无法控制切割的最终数量。本文将介绍sklearn.feature_extraction.image库中的extract_patches_2d函数。该函数可以将一张图像分割成多个重叠或非重叠的小图,以便进一步处理或分析。当你指定需要切割的数量时,该程序将会尽可能不重叠的切割你的图像。如下图所示。 


 这个程序是怎么实现的呢?本文将会首先介绍这个函数的使用,其次我将会给出一个示例程序直接帮助你批量切割图片。

目录

 〇、准备工作,PIL库安装

一、函数介绍

二、批量转换图片


 〇、准备工作,PIL库安装

可以通过以下命令在Python中安装Pillow库(它是Python Imaging Library的分支版本):

pip install Pillow

同时,你可以使用pip命令来安装scikit-learn,即sklearn。在命令行中输入以下命令即可安装:

pip install -U scikit-learn

此外,还可以通过Anaconda或Miniconda等科学计算发行版进行安装。如果你使用Anaconda,可以使用以下命令来安装Pillow库:

conda install pillow

和 sklearn:

conda install scikit-learn

一、函数介绍

要使用extract_patches_2d函数,你需要指定输入图像、小块(patch)大小和最大小块数量。小块大小是指要提取的每个小图的大小,通常以像素为单位表示。最大小块数量是指要从图像中提取的最大小块数量。如果不指定最大小块数量,则该函数将提取尽可能多的不重叠小块。

例如,假设你有一张500x500像素的图像,并且希望将其分割成大小为32x32像素的重叠patch,可以按如下方式使用extract_patches_2d函数:

  1. # 读取图像文件并将其转换为NumPy数组
  2. image = plt.imread('image.jpg')
  3. # 定义patch大小
  4. patch_size = (32, 32)
  5. # 定义要提取的最大patch数量
  6. max_patches = None
  7. # 从图像中提取patch
  8. patches = extract_patches_2d(image, patch_size, max_patches=max_patches)

在上面的代码中,我们首先使用plt.imread()函数将图像文件加载为NumPy数组。然后,我们定义了patch大小为32x32像素,并将最大patch数量设置为None以提取尽可能多的不重叠patch。最后,我们使用extract_patches_2d函数从图像中提取patch,并将结果保存在patches变量中。

二、批量转换图片

在这个case里,我将介绍如何批量切割一个文件夹里的大量图片。

  1. import os
  2. from PIL import Image
  3. from sklearn.feature_extraction.image import extract_patches_2d
  4. from numpy to np
  5. # 定义输入和输出文件夹路径
  6. input_dir = '/path/to/input/folder/'
  7. output_dir = '/path/to/output/folder/'
  8. # 定义patch大小
  9. patch_size = (32, 32)
  10. # 定义要提取的最大patch数量
  11. max_patches = None
  12. # 遍历输入文件夹中的所有图像文件
  13. for filename in os.listdir(input_dir):
  14. if filename.endswith('.jpg') or filename.endswith('.png'):
  15. # 加载图像作为NumPy数组
  16. image = np.array(Image.open(os.path.join(input_dir, filename)))
  17. # 从图像中提取patch
  18. patches = extract_patches_2d(image, patch_size, max_patches=max_patches)
  19. # 将patch保存为图像文件
  20. for i, patch in enumerate(patches):
  21. # 将patch转换为PIL图像对象
  22. patch_image = Image.fromarray(patch)
  23. # 创建输出文件夹(如果不存在)
  24. if not os.path.exists(output_dir):
  25. os.makedirs(output_dir)
  26. # 保存patch图像文件
  27. patch_filename = os.path.splitext(filename)[0] + '_patch{}.jpg'.format(i)
  28. patch_image.save(os.path.join(output_dir, patch_filename))

在此示例中,我们首先定义了输入和输出文件夹的路径,以及要提取的patch大小和最大patch数量。然后,我们使用os库遍历输入文件夹中的所有图像文件,并使用PIL库将它们加载为NumPy数组。接下来,我们使用extract_patches_2d函数从图像中提取patches,并使用PIL库将每个patch保存为单独的图像文件。最后,我们将输出文件保存到输出文件夹中。

值得注意的是,我这里假设输入文件夹中只包含图像文件,并且所有图像文件都具有.jpg.png文件扩展名。如果你的文件夹中包含其他类型的文件或文件扩展名,请相应地更改代码。此外,此示例代码将输出文件保存为JPEG格式。如果你需要使用其他格式,请相应地更改patch_image.save()调用中的文件扩展名。

创作不易,如果帮到你可不可以点赞关注,谢谢啦~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/77480
推荐阅读
相关标签
  

闽ICP备14008679号