要使用计算机视觉读取图像,您通常会使用像 OpenCV 或 Python Imaging Library (PIL/Pillow) 这样的库,它们将图像数据处理为数组。例如,OpenCV 提供了 cv2.imread()
函数,该函数将图像文件(例如 JPEG、PNG)加载到表示像素值的 NumPy 数组中。 同样,Pillow 的 Image.open()
方法读取图像并允许转换为 NumPy 数组以进行处理。这些库抽象了文件格式和颜色空间的复杂性,让您专注于操作像素数据。例如,使用 OpenCV,一个简单的 image = cv2.imread('photo.jpg')
将图像加载为 3D 数组(高度、宽度、颜色通道),每个像素的蓝色、绿色和红色强度值的范围为 0 到 255。 这种数组结构是大多数计算机视觉任务的基础。
读取图像时,理解颜色通道和数据类型至关重要。OpenCV 默认使用 BGR 颜色顺序,而 Pillow 使用 RGB。这种差异可能会在切换库时导致问题。例如,如果您使用 OpenCV 加载图像并使用期望 RGB 的库显示它,除非您使用 cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
进行转换,否则颜色将显示为反转。此外,灰度图像通过折叠颜色通道将数组减少到 2D(高度、宽度)。您可以在加载期间强制灰度转换:cv2.imread('photo.jpg', cv2.IMREAD_GRAYSCALE)
。Pillow 使用 Image.open('photo.jpg').convert('L')
处理此问题。 这两个库还处理 PNG 等格式中的透明度(Alpha 通道),为数组添加第四个维度。正确管理这些细节可确保与下游任务(如对象检测或图像增强)的兼容性。
除了基本加载之外,通常还会执行预处理步骤。将图像调整为一致的分辨率是很常见的,可以通过 OpenCV 的 cv2.resize()
或 Pillow 的 Image.resize()
实现。归一化像素值(例如,从 0-255 缩放到 0-1)对于机器学习模型至关重要。像 TensorFlow 或 PyTorch 这样的库提供了像 tf.image.decode_image()
或 torchvision.io.read_image()
这样的实用程序,它们直接与他们的数据管道集成。例如,TensorFlow 的 tf.io.read_file()
与 tf.image.decode_jpeg()
结合使用,可将图像加载并解码为张量。处理边缘情况(例如,损坏的文件或不支持的格式)需要验证——例如,检查 OpenCV 数组在加载后是否不为 None
。这些步骤确保图像数据已结构化和归一化,以用于训练神经网络或应用过滤器等任务。