图像处理基础(上):从像素到色彩空间

各位同学,欢迎来到车道线检测实战课的第一章。

说实话,很多初学者一上来就急着调模型、跑网络,结果连图像在计算机里长什么样都没搞明白。我当年刚入行时也犯过这个错——拿到一张图片就往上堆算法,最后发现连最基本的像素值都没读对。嗯,今天我们就从最底层开始,把图像的本质彻底讲清楚。

1. 图像的本质:像素、通道、色彩空间

先问大家一个问题:你在屏幕上看到的这张车道线图片,计算机眼里是什么?

答案很简单——一堆数字。说白了,图像就是一个二维数组,数组里的每个元素叫像素。

1.1 像素——图像的最小单元

每个像素就是一个数值。对于灰度图,这个值在0到255之间,0代表纯黑,255代表纯白。彩色图呢?每个像素需要三个数值来描述,分别对应红、绿、蓝三个通道的亮度。

核心概念:图像分辨率 = 宽度像素数 × 高度像素数。比如一张1920×1080的图,就是207万多个像素点。

我在项目中遇到过一件事:有次处理车载摄像头数据,发现图像边缘总有奇怪的条纹。排查了半天,原来是图像采集时像素对齐出了问题。所以大家记住——像素是基础,基础不牢,地动山摇。

1.2 通道——颜色的维度

常见的图像通道类型就三种:

  • 单通道(灰度图):每个像素一个值,0~255
  • 三通道(RGB/BGR):每个像素三个值,分别代表红绿蓝
  • 四通道(RGBA):多了一个Alpha透明度通道

这里有个坑,我必须要提醒大家:OpenCV默认用的是BGR顺序,不是RGB!我第一次用OpenCV显示图像时,发现颜色全偏了——红色变成了蓝色。你想想看,如果车道线检测中把红色标线识别成蓝色,那后果多严重?

避坑指南:OpenCV读取图像默认是BGR格式。如果你用matplotlib显示,记得先转换:cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

1.3 色彩空间——换个角度看颜色

除了RGB/BGR,工程中常用的色彩空间还有:

色彩空间 特点 车道线检测中的应用
RGB/BGR 最常用,硬件友好 原始图像输入
HSV 色调、饱和度、明度分离 提取特定颜色的车道线(如黄色线)
灰度 单通道,计算量小 边缘检测、二值化处理
LAB 亮度与颜色分离 光照变化大的场景

我个人习惯在车道线检测中优先用HSV空间。为什么?因为黄色车道线在RGB空间里受光照影响很大,但在HSV空间里,只要设定好色调范围,就能稳定提取。我曾经在一条隧道出口做测试,RGB方法直接失效,换成HSV后稳稳的。

2. OpenCV环境搭建

工欲善其事,必先利其器。咱们先把OpenCV装好。

2.1 安装OpenCV

最推荐的方式是用pip安装:

pip install opencv-python
pip install opencv-contrib-python  # 包含额外模块

小技巧:建议用国内镜像源加速,比如:pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 验证安装

打开Python终端,输入:

import cv2
print(cv2.__version__)  # 我目前用的是4.8.0

如果输出版本号,恭喜你,环境搭好了。

注意:不同版本的OpenCV在某些函数上可能有差异。我建议统一用4.x版本,比较稳定。

3. 图像的读取与显示

好了,现在我们来写第一段代码。这段代码虽然简单,但它是所有图像处理的起点。

3.1 读取图像

import cv2

# 读取图像
img = cv2.imread('road.jpg')

# 检查是否读取成功
if img is None:
    print("图片没找到,检查路径!")
else:
    print(f"图像尺寸:{img.shape}")  # (高度, 宽度, 通道数)

img.shape返回三个值:高、宽、通道数。比如(720, 1280, 3)表示720行、1280列、3通道(BGR)。

3.2 显示图像

cv2.imshow('Lane Detection', img)
cv2.waitKey(0)  # 等待按键
cv2.destroyAllWindows()

这里waitKey(0)的意思是无限等待,直到你按下任意键。如果你想让窗口自动关闭,可以设置等待时间,比如waitKey(3000)就是等3秒。

经验之谈:我在调试车道线算法时,经常用imshow实时查看中间结果。但注意,在自动驾驶实车测试中,频繁显示图像会拖慢处理速度。所以开发阶段用imshow,部署阶段一定要关掉。

3.3 保存图像

cv2.imwrite('output.jpg', img)

就这么一行。支持jpg、png等常见格式。

4. 本章知识体系

为了让大家更直观地理解本章的知识结构,我画了一张图:

图像处理基础(上)知识体系 图像的本质 像素 通道 色彩空间 OpenCV环境搭建 pip安装 版本验证 图像读写显示 imread imshow imwrite 核心:图像 = 像素矩阵 + 通道 + 色彩空间 OpenCV是操作这个矩阵的瑞士军刀

5. 本章小结

今天我们做了三件事:

  1. 搞清楚了图像的本质——像素、通道、色彩空间
  2. 搭好了OpenCV开发环境
  3. 学会了图像的读取、显示和保存

这些内容看起来基础,但非常重要。我见过太多人在后续的车道线检测中出问题,最后发现是色彩空间没搞对、通道顺序弄反了。所以,别嫌简单,把这些基础打扎实了,后面的路才好走。

好了,今天的课就到这里。记住我说的——图像就是数字,数字就是图像。下次见。

可可精品资料库