如果你是完全零基础,想学计算机视觉,又怕被“深度学习”四个字劝退,我给你的第一个建议是:先不要碰深度学习,把手头的 Python 和 OpenCV 基础打好。OpenCV 是最常用的开源计算机视觉库,擅长处理图像读取、颜色转换、边缘检测、轮廓分析、批量处理这些基础任务,也是后面学目标检测、图像分类、实例分割绕不开的前置环节。这篇内容面向 0 基础自学者,按“环境搭建 -> 图像处理 -> 目标检测概念 -> 小项目 -> 常见坑”的顺序拆一遍。不保证你看完就能发论文,但至少能独立跑通一个计算机视觉小项目,也能知道下一步该补什么。
1. 零基础学计算机视觉,为什么先从 OpenCV 入手而不是直接学深度学习
1.1 计算机视觉到底在做什么
计算机视觉要解决的核心问题,是让程序能看懂图片和视频。一张图片在计算机里并不是一个整体,而是一个一个像素点组成的矩阵。每个像素点有颜色、亮度、位置信息,彩色图片通常有三个通道,灰度图片只有一个通道。计算机视觉要做的,就是从这些原始像素里提取出有意义的结构:哪里是边缘,哪里是纹理,哪里是目标物体,这个物体属于什么类别,它出现在图像的什么位置。
举个例子,你要做一个零件数量统计系统,摄像头拍下一张流水线图片,程序需要先知道哪些区域是零件,哪些区域是背景,然后把每个零件当成一个独立目标圈出来,最后数出数量。这个过程可以全部用传统图像处理完成,也可以先用深度学习检测目标位置,再用传统方法精修轮廓。无论走哪条路,第一步都是先读图、理解图像的基本数据结构。这也是 OpenCV 最擅长教你的东西。
很多初学者一上来就想做人脸识别、车牌识别、工业缺陷检测,结果直接学卷积神经网络,两周后代码能跑,但换个输入图片就“失灵”。问题不在深度学习,而在缺少图像处理的基本直觉。深度学习模型的输入输出也是图像数据,训练时需要做缩放、归一化、增强,这些操作很多都依赖 OpenCV。所以先学 OpenCV,不是绕路,而是给后面所有视觉任务打地基。
1.2 OpenCV 与传统图像处理的关系
OpenCV 全称是 Open Source Computer Vision Library,最早主要是 C++ 编写的计算机视觉库,后来提供了 Python 接口,因此 Python 生态里大量教程都拿它做图像处理入门。传统图像处理不依赖神经网络,靠的是颜色空间、阈值、滤波、形态学、边缘检测这些确定性算法。比如你想找出一张图里的红色区域,可以在 HSV 颜色空间里规定红色范围,生成掩膜,再做膨胀腐蚀去掉噪点,最后用轮廓检测找到区域中心。整个过程不训练模型,只调参数。
深度学习不同,它需要大量标注数据,需要 GPU,需要训练过程,模型内部可以