4.2 计算机如何表示图像

什么是图像?

如果你想了解计算机如何识别和解读图像,首先需要知道从计算机的角度看,图像究竟是什么。

image-20260330181553676

对人类来说,一张图像看起来可能像是一个充满物体、色彩与情感的有意义的场景。但对计算机来说,图像只是由像素组成的数值数据网格,每个像素存储着代表亮度或颜色的值。通过用数学模型和算法处理这些数字,计算机可以开始检测模式、识别形状、区分物体,并最终对图像所包含的内容做出判断。理解人类感知与机器表示之间的这种差异,是理解计算机视觉如何工作的第一步。

图像作为数值数组

image-20260331091053228

数字图像是一个数值网格。网格中的每一个位置称为一个像素。

  • 在灰度图像中,每个像素通常存储一个值。
  • 在彩色图像中,每个像素存储多个值,每个通道一个。

对计算机而言,图像不是"一只猫"或"一辆车"。它是一个具有形状、数据类型和数值内容的数组。

通道

image-20260331091848480

通道是每个像素存储的一种值。例如,灰度图像有 1 个通道,而彩色图像通常有 3 个通道,比如 RGB。换句话说,计算机将图像视为按通道排列的数字,而不是直接看到现实世界中的物体。OpenCV 通常使用 BGR 顺序而不是 RGB。许多初学者最先接触的是 RGB 图像,但不同任务会使用不同的通道布局。

表示方式含义
灰度每个像素一个强度值
RGB / BGR每个像素三个颜色通道
HSV色相、饱和度、明度

OpenCV 通常使用 BGR 顺序而不是 RGB,这是一个重要的实用细节。

分辨率

分辨率描述图像包含的像素数量,例如 640 x 4801920 x 1080

image-20260331093601010

更高的分辨率通常会带来更多的细节,但也会增加:

  • 内存占用
  • 处理成本
  • 训练和推理时间

视频作为帧序列

视频是按时间顺序排列的图像流。

image-20260331135422667

这意味着视频引入了两层复杂性:

  • 每帧的视觉结构
  • 跨帧的时间变化

挑战

image-20260331135649175

实际的相机输入可能受到以下因素影响:

  • 运动模糊
  • 弱光环境
  • 噪声
  • 镜头畸变
  • 压缩伪影
  • 丢帧

这就是为什么良好的计算机视觉工作不仅依赖模型,也依赖数据质量。

试一试

使用 OpenCV 操作图像

bash
#clone the source code
git clone https://github.com/Seeed-Projects/reComputer-Jetson-for-Beginners
cd reComputer-Jetson-for-Beginners/4-Computer-Vision/4.2-How-Computers-Represent-Images/code
# Install opencv if you don't install before
pip install opencv-python
#run the script
python show_img.py

你将看到如下输出:

image-20260331113129592

读取视频

python
python show_video.py

你将看到如下输出:

video

练习 / 反思

  1. 加载一张图像并打印其 shapedtype
  2. 将同一张图像转换为灰度图和 HSV。描述视觉上的变化。
  3. 将一张图像调整为两种不同的分辨率,并比较文件大小或处理时间。
  4. 打开一段简短的视频,估计 10 秒内大约显示了多少帧。

总结

图像是结构化的数值数据,而不仅仅是图片。理解像素、通道、分辨率和视频帧至关重要,因为后续的每一种算法,从阈值化到 CNN,都是基于这些表示进行操作的。

建议下一步

继续学习 4.3 经典计算机视觉

参考资料