将图像转换为numpy数组的必要性是什么?

4

我正在观看使用OpenCV、numpy和PIL进行面部识别项目的教程。 在训练过程中,图像被转换为numpy数组,将其转换为numpy数组的原因是什么?

代码:

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

数组表示具有像素值作为Numpy矩阵的特征,可用于任何机器学习算法。 - Akhil Batra
OpenCV中是否有以图像为参数的函数? - Jörg W Mittag
1
@JörgWMittag 几乎每个 OpenCV 函数都使用 Numpy 数组中的图像作为参数。 - Mark Setchell
@MarkSetchell:那么,如果函数接受Numpy数组,那么为什么需要将图像转换为Numpy数组应该就很显而易见了。 - Jörg W Mittag
在你展示的这两行代码中,没有真正的理由。不过,实际的程序可能还有一些进一步的语句,调用需要numpy数组作为输入的函数。 - Dan Mašek
2个回答

3

简而言之; OpenCV 图像以三维 Numpy 数组的形式存储。

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

enter image description here

这是一个演示,展示了如何使用Numpy数组在OpenCV中存储该图像。

enter image description here

如果我们读入椅子的图像,我们可以使用image.shape来查看其结构,返回一个元组(高度,宽度,通道数)。如果是彩色图像,则图像属性将是行数、列数和通道数的元组。如果是灰度图像,则image.shape仅返回行数和列数。
import cv2

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

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

1
答案非常简单:使用Numpy,您可以对数字数组进行极快的操作,无论它们的维度、形状等如何。图像处理库(OpenCV、PIL、scikit-image)有时会在某些特殊格式中包装图像,这些格式已经在后台使用了Numpy。如果它们没有在后台使用Numpy,则可以将图像显式转换为Numpy数组。然后,您可以对它们进行快速的数值计算(卷积、FFT、模糊、滤波等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接