如何使用 PIL/Pillow 在 Python 中加载和处理图像以进行深度学习

在为图像数据开发预测模型之前,您必须学习如何加载和处理图像和照片。

Python 中用于加载和处理图像数据最流行且事实上是标准库的是 Pillow。Pillow 是 Python 图像库(PIL)的更新版本,支持一系列简单和复杂的图像处理功能。它也是 SciPy 和 Matplotlib 等其他 Python 库中简单图像支持的基础。

在本教程中,您将学习如何使用 Pillow Python 库加载和处理图像数据。

完成本教程后,您将了解:

  • 如何安装 Pillow 库并确认其正常工作。
  • 如何从文件加载图像,将加载的图像转换为 NumPy 数组,以及以新格式保存图像。
  • 如何对图像数据执行基本变换,例如调整大小、翻转、旋转和裁剪。

通过我的新书《计算机视觉深度学习》启动您的项目,包括**分步教程**和所有示例的**Python 源代码文件**。

让我们开始吧。

  • 2019 年 9 月更新:已更新以反映 Pillow API 的细微变化。

教程概述

本教程分为六个部分;它们是:

  1. 如何安装 Pillow
  2. 如何加载和显示图像
  3. 如何将图像转换为 NumPy 数组并再转换回来
  4. 如何将图像保存到文件
  5. 如何调整图像大小
  6. 如何翻转、旋转和裁剪图像

如何安装 Pillow

Python 图像库,简称 PIL,是一个用于加载和处理图像的开源库。

它于 25 年前开发并发布,已成为 Python 中处理图像的事实标准 API。该库现已废弃,不再更新,也不支持 Python 3。

Pillow 是一个支持 Python 3 的 PIL 库,是 Python 中图像处理的首选现代库。它甚至在 SciPy 和 Matplotlib 等其他 Python 科学库中也需要用于简单的图像加载和保存。

Pillow 库作为大多数 SciPy 安装的一部分进行安装;例如,如果您正在使用 Anaconda。

有关设置 SciPy 环境的帮助,请参阅分步教程

如果您为您的工作站自行管理 Python 软件包的安装,您可以使用 pip 轻松安装 Pillow;例如

有关手动安装 Pillow 的更多帮助,请参阅

Pillow 是在较旧的 PIL 基础上构建的,您可以通过打印版本号来确认库是否正确安装;例如

运行该示例将打印 Pillow 的版本号;您的版本号应该相同或更高。

现在您的环境已设置好,让我们看看如何加载图像。

想通过深度学习实现计算机视觉成果吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

如何加载和显示图像

我们需要一个测试图像来演示使用 Pillow 库的一些重要功能。

在本教程中,我们将使用 Ed Dunens 拍摄并根据知识共享许可(保留部分权利)在 Flickr 上提供的悉尼歌剧院的照片。

Sydney Opera House

悉尼歌剧院

下载照片并将其保存到当前工作目录,文件名为“opera_house.jpg”。

图像通常为 PNG 或 JPEG 格式,可以使用 Image 类上的 open() 函数直接加载。这会返回一个 Image 对象,其中包含图像的像素数据以及图像的详细信息。Image 类是 Pillow 库的主要核心,提供了大量关于图像的属性以及允许您操作图像像素和格式的函数。

图像上的“format”属性将报告图像格式(例如 JPEG),“mode”将报告像素通道格式(例如 RGB 或 CMYK),“size”将报告图像的像素尺寸(例如 640x480)。

show() 函数将使用操作系统的默认应用程序显示图像。

下面的示例演示了如何使用 Pillow 库中的 Image 类加载和显示图像。

运行该示例将首先加载图像,报告格式、模式和大小,然后在您的桌面显示图像。

图像将使用操作系统的默认图像预览应用程序显示,例如 macOS 上的“预览”。

Sydney Opera House Displayed Using the Default Image Preview Application

使用默认图像预览应用程序显示的悉尼歌剧院

现在您已经知道如何加载图像,接下来让我们看看如何访问图像的像素数据。

如何将图像转换为 NumPy 数组并再转换回来

在机器学习中,我们通常希望将图像作为像素数据的 NumPy 数组来处理。

安装 Pillow 后,您还可以使用 Matplotlib 库加载图像并将其显示在 Matplotlib 框架内。

这可以通过使用直接将图像加载为像素数组的 imread() 函数以及将像素数组显示为图像的 imshow() 函数来实现。

下面的示例使用 Matplotlib 加载并显示相同的图像,Matplotlib 会在内部使用 Pillow。

运行该示例首先加载图像,然后报告数组的数据类型(在本例中为 8 位无符号整数),然后报告数组的形状(在本例中为 360 像素宽 x 640 像素高,以及红、绿、蓝三个通道)。

最后,使用 Matplotlib 显示图像。

Sydney Opera House Displayed Using Matplotlib

使用 Matplotlib 显示的悉尼歌剧院

Matplotlib 的封装函数可能比直接使用 Pillow 更有效。

尽管如此,您可以从 Pillow 图像访问像素数据。也许最简单的方法是构建一个 NumPy 数组并传入 Image 对象。该过程可以逆转,使用 *Image.fromarray()* 函数将给定的像素数据数组转换为 Pillow Image 对象。如果图像数据被操作为 NumPy 数组,然后您想稍后将其保存为 PNG 或 JPEG 文件,这可能很有用。

下面的示例将照片加载为 Pillow Image 对象并将其转换为 NumPy 数组,然后再将其转换回 Image 对象。

运行该示例首先将照片加载为 Pillow 图像,然后将其转换为 NumPy 数组并报告数组的形状。最后,数组被转换回 Pillow 图像并报告其详细信息。

两种方法都可以有效地将图像数据加载到 NumPy 数组中,尽管 Matplotlib 的 imread() 函数比加载和转换 Pillow Image 对象所需的代码行更少,因此可能更受青睐。

例如,您可以轻松地将目录中的所有图像加载到一个列表中,如下所示:

现在我们知道如何将图像加载为 NumPy 数组,接下来让我们看看如何将图像保存到文件。

如何将图像保存到文件

可以通过调用 save() 函数来保存图像对象。

如果您想将图像保存为不同的格式,这会很有用,在这种情况下,可以指定“format”参数,例如 PNG、GIF 或 PEG。

例如,下面的代码清单以 JPEG 格式加载照片并以 PNG 格式保存。

运行该示例会加载 JPEG 图像,将其保存为 PNG 格式,然后再次加载新保存的图像,并确认格式确实是 PNG。

如果您在建模前对图像进行了一些数据准备,保存图像会很有用。一个例子是将彩色图像(RGB 通道)转换为灰度图像(1 个通道)。

有多种方法可以将图像转换为灰度,但 Pillow 提供了 convert() 函数,并且模式“L”会将图像转换为灰度。

运行该示例会加载照片,将其转换为灰度,将图像保存到新文件中,然后再次加载并显示,以确认照片现在是灰度而不是彩色。

Example of Grayscale Version of Photograph

照片灰度版本的示例

如何调整图像大小

在建模之前能够调整图像大小非常重要。

有时,希望将所有图像的缩略图调整为相同的宽度或高度。这可以使用 Pillow 中的 `thumbnail()` 函数实现。该函数接受一个包含宽度和高度的元组,图像将被调整大小,使图像的宽度和高度等于或小于指定形状。

例如,我们一直在处理的测试照片的宽度和高度为 (640, 360)。我们可以将其调整为 (100, 100),在这种情况下,最大的维度(本例中为宽度)将减小到 100,高度将按比例缩放以保持图像的宽高比。

下面的示例将加载照片并创建一个宽度和高度为 100 像素的较小缩略图。

运行该示例首先加载照片并报告宽度和高度。然后调整图像大小,在这种情况下,宽度减小到 100 像素,高度减小到 56 像素,同时保持原始图像的宽高比。

我们可能不希望保留纵横比,而是希望强制像素变为新的形状。

这可以通过使用 `resize()` 函数实现,该函数允许您指定像素的宽度和高度,图像将被缩小或拉伸以适应新的形状。

下面的示例演示了如何调整新图像的大小并忽略原始纵横比。

运行该示例加载图像,报告图像的形状,然后将其调整为 200 像素宽和高。

图像的大小已显示,我们可以看到这张宽幅照片已被压缩成一个正方形,尽管所有特征仍然非常清晰可见。

调整大小时,会使用标准重采样算法来创建或移除像素,您可以指定一种技术,尽管默认是双三次重采样算法,适用于大多数通用应用程序。

Resized Photograph That Does Not Preserve the Original Aspect Ratio

未保留原始宽高比的调整大小后的照片

如何翻转、旋转和裁剪图像

简单的图像处理可以用来创建图像的新版本,从而在建模时提供更丰富的训练数据集。

通常,这被称为数据增强,可能涉及创建原始图像的翻转、旋转、裁剪或其他修改版本,希望算法能够从图像数据中提取相同的特征,无论它们可能出现在何处。

您可能希望实施自己的数据增强方案,在这种情况下,您需要知道如何对图像数据执行基本操作。

翻转图像

可以通过调用 `flip()` 函数并传入 `FLIP_LEFT_RIGHT`(水平翻转)或 `FLIP_TOP_BOTTOM`(垂直翻转)等方法来翻转图像。还提供其他翻转方式。

下面的示例创建了图像的水平和垂直翻转版本。

运行该示例会加载照片并创建照片的水平和垂直翻转版本,然后使用 Matplotlib 将所有三个版本绘制为子图。

您会注意到,`imshow()` 函数可以直接绘制 Image 对象,而无需将其转换为 NumPy 数组。

Plot of Original, Horizontal, and Vertical Flipped Versions of a Photograph

照片的原始、水平翻转和垂直翻转版本图

旋转图像

可以使用 `rotate()` 函数并传入旋转角度来旋转图像。

该函数提供额外的控制,例如是否扩展图像尺寸以适应旋转后的像素值(默认为裁剪到相同大小),旋转图像的中心位置(默认为中心),以及图像外部像素的填充颜色(默认为黑色)。

下面的示例创建了图像的几个旋转版本。

运行该示例会绘制原始照片,然后是旋转 45 度的版本,以及旋转 90 度的版本。

您可以看到,在两次旋转中,像素都被裁剪到图像的原始尺寸,并且空白像素被填充为黑色。

Plot of Original and Rotated Version of a Photograph

照片的原始版本和旋转版本图

裁剪图像

可以使用 `crop()` 函数裁剪图像:即,从图像中剪切出一部分以创建新图像。

裁剪函数接受一个元组参数,该参数定义了要从图像中裁剪出的矩形框的两个 x/y 坐标。例如,如果图像为 2,000 x 2,000 像素,我们可以通过定义一个包含左上角和右下角点 (950, 950, 1050, 1050) 的元组,从图像中间裁剪出一个 100 x 100 的框。

下面的示例演示了如何从加载的图像中裁剪出新图像。

运行该示例会创建一个裁剪后的正方形图像,尺寸为 100 像素,从 100,100 开始,向下方和左方延伸至 200,200。然后显示裁剪后的正方形。

Example of a Cropped Version of a Photograph

照片裁剪版本的示例

扩展

本节列出了一些您可能希望探索的扩展本教程的想法。

  • 您自己的图像。使用 Pillow 函数处理您自己的图像数据,进行图像读取和操作的实验。
  • 更多变换。查阅 Pillow API 文档,并尝试使用其他图像处理函数。
  • 图像预处理。编写一个函数来创建图像的增强版本,以供深度学习神经网络使用。

如果您探索了这些扩展中的任何一个,我很想知道。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

总结

在本教程中,您学习了如何使用 Pillow Python 库加载和处理图像数据。

具体来说,你学到了:

  • 如何安装 Pillow 库并确认其正常工作。
  • 如何从文件加载图像,将加载的图像转换为 NumPy 数组,以及以新格式保存图像。
  • 如何对图像数据执行基本变换,例如调整大小、翻转、旋转和裁剪。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

立即开发用于视觉的深度学习模型!

Deep Learning for Computer Vision

在几分钟内开发您自己的视觉模型

...只需几行python代码

在我的新电子书中探索如何实现
用于计算机视觉的深度学习

它提供关于以下主题的自学教程
分类物体检测(YOLO和R-CNN)人脸识别(VGGFace和FaceNet)数据准备等等……

最终将深度学习引入您的视觉项目

跳过学术理论。只看结果。

查看内容

对《如何使用 PIL/Pillow 在 Python 中加载和处理图像以进行深度学习》的 90 条回复

  1. Carlos 2019 年 3 月 22 日 上午 7:55 #

    你好 Jason,

    非常感谢您使我们所有人都能轻松访问所有这些材料。
    计算机视觉在应用您以前关于深度学习的所有工作方面具有巨大潜力。

    再次感谢,
    卡洛斯。

    • Jason Brownlee 2019 年 3 月 22 日 上午 8:45 #

      我同意,谢谢。

      • prd 2019 年 3 月 22 日 下午 5:17 #

        先生,我从事计算机视觉领域的工作。我购买了您的机器学习算法书籍。我阅读了一些选定的主题。我正在研究行人重识别。我阅读了一些综述论文以及一些使用深度学习的其他论文。我想写一篇关于行人重识别的自己的综述,但到目前为止我还没有能够编写自己的分类法。请帮助我设计自己的分类法

  2. Mike 2019 年 3 月 22 日 晚上 8:03 #

    又一篇精彩的文章。
    只是想让您知道:您的博客、电子书和教程让我进入了机器学习领域。两年后,我现在能够创建商业应用程序,并且是一名认证专业人士。

    我现在不像以前那样经常访问这里,因为我的项目大多不是您的重点,但我仍然向任何寻求该主题教程和指南的人推荐您的网站。

    干得好。谢谢!

  3. Nirmala 2019 年 3 月 23 日 下午 4:37 #

    很棒的帖子。感谢您让所有人都能轻松访问。
    一个快速问题,如果图像上有任何文本内容,是否可以提取文本?

    谢谢你

    • Jason Brownlee 2019 年 3 月 24 日 上午 7:03 #

      很好的建议,谢谢。

      我希望将来能涵盖这个主题。

      • Wildcard 2019 年 12 月 6 日 上午 4:48 #

        我也同意文本提取。将原始格式提取为文本的像素数据数组将是多功能程序操作的关键。

  4. JG 2019 年 3 月 24 日 上午 5:40 #

    Brownlee 先生一如既往地提供了精彩且有价值的图像教程。谢谢!

    由于您可以使用不同的库(如 PIL(和 PILLOW)和 MATPLOTLIB)来处理图像,因此一开始您可能会对如何读取、处理、保存、显示等图像感到困惑。
    此外,您现在还有 Keras 等效函数和方法,例如 `load_image`、`image_to_array`、`array_to_image`、图像预处理(如 `ImageDataGenerator` 用于数据增强)等……因此,在有这么多并行或等效方法的情况下决定使用哪一个有时会让人感到困惑。无论如何,我认为,一旦您从事机器学习/深度学习工作,Keras 现在是更全面的选择。

    图像处理的一个显著特点,至少对我而言,是当您将图像读入 numpy 数组时,也就是说,将一些 .jpg 格式转换为 numpy 数组(稍后您可以将 np 数组保存为“.npy”numpy 格式),文件体积通常会增加 40 倍。例如,一个 15 KB 的 .jpg 图像会转换为 0.6 MB 的 np……因此唯一的解释是 JPEG 格式压缩这种数字 numpy 数组的能力!

    • Jason Brownlee 2019 年 3 月 24 日 上午 7:09 #

      谢谢,几乎所有这些都建立在并需要 PIL/Pillow。

      尽管如此,我将在接下来的教程中演示每个 API。

      是的,我也有这个问题。您必须仔细选择精度(例如 1632 位浮点数)并使用压缩的 numpy 数组保存。

  5. Gilles 2019 年 3 月 28 日 上午 10:21 #

    简单、实用、切中要害。谢谢!

  6. Ishwarya 2019 年 4 月 4 日 下午 12:41 #

    你好,

    感谢您的有用帖子。我想裁剪图像的一部分,例如,在大型图像中的一小部分上以所需的角度绘制一个矩形,然后裁剪该部分。
    你能告诉我怎么裁剪它吗?我有矩形的中心点、高度、宽度和倾斜角度。

  7. Vijayalakshmi 2019 年 4 月 7 日 上午 2:01 #

    我有矩形的四个坐标。如何使用它们来裁剪图像。您能提供代码示例吗?
    谢谢

    • Jason Brownlee 2019 年 4 月 7 日 上午 5:31 #

      我建议参考上面教程中关于使用 crop() 函数的示例。

  8. Chiranjibi Sitaula 2019 年 4 月 13 日 上午 11:55 #

    尊敬的先生,
    我想知道如何用对角线将图像分成两个三角形。怎么做?我很想知道。我需要用对角线分割图像。谢谢。

    • Jason Brownlee 2019 年 4 月 13 日 下午 1:49 #

      好问题。抱歉,我没有这方面的示例。

    • MLNewbie 2019 年 12 月 20 日 下午 3:21 #

      嗨 – 你想出来了吗?我正在寻找类似的东西。

      • Chris Buono 2020 年 1 月 7 日 下午 1:03 #

        您可以执行旋转和裁剪的混合操作,最终得到带有背景的三角形图像,或者您可以使用蒙版功能。如果您在 Stack Overflow 中搜索“How can I cut custom shape from an Image with PIL”,您可以找到一个示例。

  9. murat 2019 年 5 月 9 日 下午 5:05 #

    嘿,

    我需要知道如何加载和处理 LIST 图像以进行深度学习。您只处理了一张图像,但我需要处理多张图像。多张图像的加载、处理等。

    请帮帮我好吗?

  10. Rumeli Depolama 2019 年 5 月 10 日 上午 10:29 #

    这篇机器学习文章非常有用,非常感谢

  11. poornima 2019 年 6 月 18 日 下午 5:30 #

    先生,我正在进行图像比较,您能帮我如何在 Python 中比较两张图像以及需要安装的模块吗?

  12. Injamamul Haque 2019 年 6 月 26 日 下午 12:42 #

    先生,是否有可能使用像素值来确定物体的速度?

    • Jason Brownlee 2019 年 6 月 26 日 下午 2:21 #

      也许吧。抱歉,我不了解这个话题。

  13. Sunil 2019 年 7 月 14 日 下午 6:56 #

    我想给从文件夹读取的图像打上标签,例如从 4 个文件夹读取图像并为每个文件夹打上标签。

    • Jason Brownlee 2019 年 7 月 15 日 上午 8:16 #

      是的,本教程中的示例将提供一个很好的起点。

  14. Ahmet TORTUMLU 2019 年 7 月 20 日 下午 4:59 #

    谢谢,对初学者真的很有帮助,

    我有问题

    1. 我们如何用这些方法等分(例如 8 或 9)?

    2. 当我管理图像时,我遇到了图像大小是字符串的错误 :)

  15. Asad 2019 年 9 月 2 日 下午 1:19 #

    你好,
    我正在处理 RGB 数据集,但是现在我想提取 RGB 值并将一张图像转换为 3 张新的灰度图像,基于 R、G 和 B 的值。即 1 张 RGB 图像 = 3 张分别带有 R、G 和 B 值的图像。您能指导我吗?

    • Jason Brownlee 2019 年 9 月 2 日 下午 1:50 #

      听起来很简单。你遇到的具体问题是什么?

  16. Hemanth kumar 2019 年 9 月 19 日 晚上 8:58 #

    尊敬的先生,如何给出我的标注数据或如何将其加载到模型中进行训练
    (我有一个地面图像作为标签),我将我的原始图像转换为 numpy 数组(通过您的教程 Pillow),并输入到我的 x_train 中,那么 x_label 接下来是什么?

  17. sofia 2019 年 11 月 7 日 下午 7:38 #

    这对我来说太有帮助了,非常感谢!♥️

  18. Himanshu 2020 年 1 月 11 日 上午 12:58 #

    先生,我有一个图像形式的图表。我想读取点并使用多项式回归模型生成系数。第二部分不是问题。但是手动读取 200 个图表不准确。您能帮忙吗?

  19. YBenYoussef 2020 年 1 月 22 日 晚上 9:11 #

    先生,我有一个 pgm 格式的小图像数据集,我将使用 ImageDatatGenerator,但它
    使用 pgm 和 png……您能帮帮我吗?

  20. Jeyaraj 2020 年 1 月 28 日 下午 3:38 #

    有没有办法将所有预处理后的图像保存为 numpy 数组?因为我的虚拟机每次停止,我都需要重新进行所有预处理。

    所以如果我永久保存所有处理过的数据,我以后就可以重复使用它。

    我是机器学习新手。

  21. Ammar 2020 年 2 月 5 日 晚上 9:40 #

    你好,
    如何缩短人脸预测的处理时间?
    预测需要长达 4 秒(提取人脸需要长达 1.8 秒)

    • Jason Brownlee 2020 年 2 月 6 日 上午 8:24 #

      更小的模型。
      更快的电脑。
      更小的图像。

      • Imrose 2020 年 2 月 17 日 上午 4:06 #

        你好,
        我已将图像转换为灰度并以 48*48 尺寸的 jpg 格式保存,之后我提取了图像像素并创建了一个类似于 FER13 数据集的 csv 文件。然后,当我将 csv 文件转换为 numpy 文件时,它显示“无法将大小为 6912 的数组重塑为形状 (48,48)”。您能告诉我为什么会这样吗?所有图像都已转换为 (48,48)。附注:我之前通过相同的过程从这些图像中制作了一个小型数据集,并且当时它工作正常。

        • Jason Brownlee 2020 年 2 月 17 日 上午 7:51 #

          抱歉,我不知道您故障的原因。也许将您的代码和错误发布到 stackoverflow?

  22. Ankit Sheoran 2020 年 3 月 1 日 下午 3:43 #

    布朗利先生,您好,

    我有一个 jpg 格式的图像数据集,每张图像大小不同。我如何将它们转换为数字形式,以便它们可以适应模型。

    • Jason Brownlee 2020 年 3 月 2 日 上午 6:14 #

      按照教程中的方法将它们加载为 numpy 数组。

  23. Haleema Ahsan 2020 年 3 月 5 日 下午 4:27 #

    先生,你好
    如何调整标记图像训练数据的大小

    • Jason Brownlee 2020 年 3 月 6 日 上午 5:29 #

      加载图像,设置首选大小,保存图像或使用图像。

      • Haleema Ahsan 2020 年 3 月 6 日 下午 2:40 #

        不是单张图片,我想一次性调整整个数据集的大小

        • Jason Brownlee 2020 年 3 月 7 日 上午 7:13 #

          通常,我是在加载每张图像时执行此操作的。也许还有更好的方法。

  24. Isc 2020 年 4 月 2 日 上午 7:22 #

    有没有一种方法可以知道任何图像是否与图像列表中的某个图像相似?比如百分比。

    100 相等
    与某张图像相似的图像列表。

    谢谢

    • Jason Brownlee 2020 年 4 月 2 日 上午 7:54 #

      抱歉,我不太明白。您能详细说明一下吗?

      • Ismael 2020 年 4 月 2 日 上午 8:42 #

        我有一个包含 N 张图像(带有手写符号的黑白图像)的列表。现在,我有一张带有符号的图像,我需要知道列表中是否有任何图像与我的图像相似。

        黑白图像的一个例子
        – 圆形
        – 方形

        现在,我画了一张带有符号的新图像,比如方形(但不是相同的方形)。我需要知道图像列表中是否有与我在新图像中绘制的符号相似的符号。

        您如何检查它?

        • Jason Brownlee 2020 年 4 月 2 日 上午 9:17 #

          我明白了,谢谢。这听起来像是一个图像搜索或图像相似度问题。

          抱歉,我没有这方面的教程——我无法给出即时有效的建议。

  25. novik 2020 年 5 月 11 日 晚上 8:08 #

    我觉得这样更快
    # pip install ThreadedFileLoader
    from ThreadedFileLoader.ThreadedFileLoader import *

    instance = ThreadedImageLoader(“path_to_images/*.jpg”)
    instance.start_loading()
    images = instance.loaded_objects

  26. Deep learner enthu 2020 年 5 月 17 日 上午 4:09 #

    你好,

    我已经对我的 dicom 图像进行了预处理,并从中提取了补丁。我如何使用 python 将这些补丁存储在我的新文件夹中。
    您对此有想法吗?您能举些例子吗?

    • Jason Brownlee 2020 年 5 月 17 日 上午 6:41 #

      也许将每个保存为单独的图像。

      或者将它们存储在 numpy 数组中并将整个数组存储到文件中。

  27. jas jehu 2020 年 7 月 18 日 上午 5:37 #

    如何将 .mat 数据集转换为 .jpeg 数据集

  28. Raed 2020年10月6日上午1:34 #

    请回答我的问题
    我想使用图像压缩来最小化模型的训练时间。我在网上搜索了允许我以不同比例压缩图像的算法,我找到了 Save 命令,但它使用了 quality 参数,但我不知道 quality 参数到底是什么意思。我想要算法以我指定的比例进行压缩。
    非常感谢这篇rticle。

    • Jason Brownlee 2020年10月6日上午6:58 #

      也许可以进行敏感性分析,看看压缩质量如何影响学习。然后相应地选择。

  29. Adesoji Alu 2021年1月7日上午2:53 #

    我正在进行植物识别工作,发现很难一次性加载大约15,500张图像,我被卡住了,请帮忙

  30. Endy sofian 2021年1月11日下午7:21 #

    嗨,先生,如果可以的话请帮帮我。我想计算一个给定文件夹中10-20张图片的总绿色像素。我找到了计算它的方法,但在如何将它们全部组合在一起以产生结果方面遇到了问题。我刚接触编码,非常需要任何反馈/建议。

    • Jason Brownlee 2021年1月12日上午7:50 #

      抱歉,我没有关于这个主题的教程。

      也许 opencv 有你可以用来解决这个问题的工具。

  31. Pankaj 2021年1月30日下午9:39 #

    嗨,Jason,

    感谢精彩的教程,我有一个疑问

    当我们使用缩略图时,我们是否也会丢失特征?我有一个图像数据集,其中图像的大小可以在 (30,30) 到 (500,500) 之间。由于最小图像大小和最大图像大小之间的差距非常大,将所有图像缩略图到 (30,30) 大小是否可以,或者这会影响模型的性能吗?

    谢谢。
    Pankaj

  32. vinay 2021年2月24日下午10:03 #

    测试数据集我们可以批量上传吗……我的意思是不要放在子文件夹中。所有图片都应该在一个单独的文件夹(test)中。

  33. depolama 2021年4月12日上午7:50 #

    这篇机器学习文章非常有用,非常感谢

  34. Abdi 2021年8月5日下午10:26 #

    感谢非常有用的信息。如何从图片名称中获取标签并为分类创建训练集和标签?我需要一个像字体这样的大数据集的示例代码。

  35. Mahmood Bhat 2021年9月13日下午10:38 #

    如何在深度学习中加载深度图像进行处理?

    • Adrian Tam
      Adrian Tam 2021年9月14日下午1:36 #

      你说的深度图像是什么意思?

  36. 伊斯坦布尔逐户搬家 2022年1月18日下午10:41 #

    你指的是深度图像吗?

    • James Carmichael 2022年1月27日下午12:55 #

      你好……请澄清你的问题,以便我更好地协助你。

  37. 播种机 2022年3月19日上午6:38 #

    詹姆斯你好,感谢你的分享。我们如何在网络上运行这段代码,你能帮我吗?

  38. Fischer 2022年8月10日下午12:23 #

    你好,请问我拍了一些汽车照片,想用CNN检测车牌。我该如何清理和预处理这些图像。我急需这方面的帮助。谢谢

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。