【问题标题】:What is the need of converting an image into numpy array?将图像转换为 numpy 数组需要什么?
【发布时间】:2019-10-05 20:40:21
【问题描述】:

我正在观看有关使用 OpenCV、numpy、PIL 的面部识别项目的教程。 训练的时候,图片被转换成numpy数组,需要转换成numpy数组吗?

代码:

PIL_IMAGE = Image.open(path).convert("L")
image_array = np.array(PIL_IMAGE, "uint8")

【问题讨论】:

  • 数组表示具有作为 numpy 矩阵的像素值,可用作任何机器学习算法的特征。
  • OpenCV 中有没有以图像为参数的函数?
  • @JörgWMittag 几乎每个 OpenCV 函数都使用 Numpy 数组中的图像作为参数。
  • @MarkSetchell:那么,如果函数接受的话,为什么需要将图像转换为 Numpy 数组应该是显而易见的。
  • 在你展示的两行代码中?没有真正的理由。然而,实际的程序可能还有一些进一步的语句,它们调用期望一个 numpy 数组作为输入的函数。

标签: python image numpy opencv python-imaging-library


【解决方案1】:

TLDR; OpenCV 图像存储为三维 Numpy 数组。

当您使用库读取数字图像时,它们表示为 Numpy 数组。阵列的矩形形状对应于图像的形状。考虑一下这张椅子的图片

下面是这个图像如何在 OpenCV 中存储为 Numpy 数组的可视化

如果我们阅读椅子的图像,我们可以看到它是如何使用image.shape 构造的,它返回一个元组(height, width, channels)。如果图像是彩色图像,图像属性将是行数、列数和通道数的元组。如果是灰度图,image.shape只返回行数和列数。

import cv2

image = cv2.imread("chair.jpg")
print(image.shape)

(222, 300, 3)

在处理 OpenCV 图像时,我们首先指定 y 坐标,然后是 x 坐标。颜色存储为BGR 值,第 0 层为蓝色,第 1 层为绿色,第 2 层为红色。所以对于这张椅子图像,它的高度为 222,宽度为 300,并且有 3 个通道(意味着它是彩色图像)。本质上,当库读取任何图像时,它会将其存储为这种格式的 Numpy 数组。

【讨论】:

    【解决方案2】:

    答案很简单:

    使用 Numpy,您可以对数值数组进行极快的运算,无论它们是什么维度、形状等。

    图像处理库(OpenCV、PIL、scikit-image)有时会以某种已经在幕后使用 Numpy 的特殊格式包装图像。如果他们尚未在后台使用 Numpy,则可以将图像显式转换为 Numpy 数组。然后您可以对它们进行快速的数值计算(卷积、FFT、模糊、过滤器等)。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2017-06-25
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多