从零开始的 OpenCV 计算机视觉学习笔记与项目实战
涵盖图像处理基础到 RoboMaster 装甲板检测的完整学习路线
Opencv-Learning/
│
├── Lesson 1/ # 第 1 课:图像输入输出与数据表示
│ ├── io_image.py # 读取、显示、保存图像
│ ├── io_video.py # 读取、播放视频文件
│ ├── io_wecam.py # 调用摄像头实时采集
│ ├── 1.计算机中图像的存在形式 # 理论笔记:NumPy 数组与 BGR 像素
│ └── cat.jpg # 示例图片
│
├── Lesson 2/ # 第 2 课:图像基本操作
│ ├── crop.py # 图像裁剪
│ ├── resizing.py # 图像缩放
│ └── 图像操作 # 理论笔记
│
├── Lesson 3/ # 第 3 课:色彩空间
│ ├── Colar space.py # BGR ↔ HSV 转换
│ └── 色彩空间 # 理论笔记
│
├── Lesson 4/ # 第 4 课:图像模糊/滤波
│ ├── blur.py # 均值模糊
│ ├── GaussianBlur.py # 高斯模糊
│ └── 图像模糊处理 # 理论笔记
│
├── Lesson 5/ # 第 5 课:图像阈值处理
│ ├── Threshold.py # 全局二值化阈值
│ ├── adaptive_threshold.py # 自适应阈值
│ └── 图像阈值处理 # 理论笔记
│
├── Lesson 6/ # 第 6 课:边缘检测与形态学
│ ├── Edge detection.py # Canny 边缘检测
│ ├── 边缘检测 # 理论笔记
│ └── 形态学变化 # 理论笔记:膨胀/腐蚀/开闭运算
│
├── Lesson 7/ # 第 7 课:绘图与文字
│ ├── drawing.py # 矩形、圆形、椭圆、直线、箭头、文字
│ └── hello_icbk_drawing.png # 输出示例图
│
├── ICBK算法组第二周周训项目/ # 周训 2:HSV 色彩检测
│ ├── HSVfinding.py # HSV 阈值范围计算工具
│ ├── 识别颜色.py # 颜色识别脚本
│ └── 色彩检测.txt # 理论笔记
│
├── ICBK算法组第三周周训项目/ # 周训 3:装甲板检测 v1
│ ├── HSVfinding.py # HSV 工具(复用)
│ ├── 装甲板.py # 图像装甲板检测
│ ├── 装甲板视频流.py # 视频流装甲板检测
│ ├── 问题汇总 # 开发问题与解决方案记录
│ ├── demo.avi # 演示视频
│ └── 任务视频.mp4 # 训练用视频
│
├── ICBK算法组第四周周训项目/ # 周训 4:装甲板检测 v2 → v3
│ ├── HSVfinding.py # HSV 工具(复用)
│ ├── 装甲板改良2.0.py # 装甲板检测 v2.0
│ ├── 装甲板改良3.0.py # 装甲板检测 v3.0
│ ├── 装甲板视频流改良1.0.py # 视频流检测 v1.0 改良
│ ├── text.mp4 # 测试视频
│ └── 任务视频.mp4 # 训练用视频
│
├── ICBK算法组第五周周训项目/ # 周训 5:HSV + 二值化融合检测
│ ├── HSVfinding.py # HSV 工具(复用)
│ ├── HSV加二值化装甲板识别.py # HSV + 二值化双通道融合(核心脚本)
│ ├── 参考焚决/ # 参考算法草稿
│ │ └── 焚决.py
│ ├── text.mp4 # 测试视频
│ └── 任务视频.mp4 # 训练用视频
│
├── ICBK算法组第十二周周训项目/ # 周训 12:卡尔曼滤波跟踪
│ ├── HSVfinding.py # HSV 工具(复用)
│ ├── kalmanfilter.py # 自定义 Kalman Filter 类(6 状态 / 2 测量)
│ ├── box.py # 边界框工具
│ ├── mian.py # 图像目标跟踪
│ └── mian_video.py # 视频流目标跟踪
│
├── 第十三周周训项目/ # 周训 13(扩展):从零实现神经网络
│ ├── train.py # NumPy 手写神经网络(单隐层 20 神经元)
│ └── data/
│ └── mnist.npz # MNIST 数据集(~11.5 MB)
│
├── C++_Version/ # C++ 版本示例
│ ├── main.cpp # OpenCV C++ 入门示例
│ └── CMakeLists.txt # CMake 构建配置
│
├── .idea/ # PyCharm 项目配置
├── requirements.txt # Python 依赖清单
└── LICENSE # MIT 开源协议
本项目是个人 OpenCV 计算机视觉学习笔记与项目实战合集,涵盖从图像处理基础到 RoboMaster 竞技机器人视觉算法的完整实践路径。项目包含 7 节系统化基础教程和 6 个 ICBK 算法组周训项目,后者以装甲板检测为核心任务,逐步从颜色筛选演进到多特征融合与目标跟踪。
适用人群: 对计算机视觉感兴趣的初学者、RoboMaster 参赛队员、希望快速上手 OpenCV 的开发者。
环境要求: Python 3.8 及以上版本。
1. 克隆仓库
git clone https://github.com/mc260/Opencv-Learning.git
cd Opencv-Learning2. 创建虚拟环境(推荐)
# 方式一:使用 venv
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows
# 方式二:使用 conda
conda create -n opencv-learn python=3.10
conda activate opencv-learn3. 安装依赖
pip install -r requirements.txtrequirements.txt 包含以下依赖:
| 包名 | 最低版本 | 用途 |
|---|---|---|
opencv-python |
4.8.0 | OpenCV 图像处理主库 |
numpy |
1.24.0 | 数值计算与数组操作 |
💡 提示: 如果在无 GUI 的服务器环境中运行,可将
opencv-python替换为opencv-python-headless,减少不必要的 GUI 依赖。
4. 验证安装
import cv2
import numpy as np
print(cv2.__version__) # 应输出 4.8.0 或更高
print(np.__version__) # 应输出 1.24.0 或更高5. 摄像头权限(可选)
Lesson 1 的 io_wecam.py 需要调用摄像头。在 Windows / macOS 上通常开箱即用;在 Linux 上可能需要安装 v4l-utils 并对 /dev/video0 有读写权限。
C++ 版本示例位于 C++_Version/ 目录,需要额外配置 OpenCV C++ 运行环境。
环境要求:
| 工具 | 最低版本 | 说明 |
|---|---|---|
| C++ 编译器 | C++20 支持 | GCC 11+ / Clang 14+ / MSVC 2022+ |
| CMake | 3.4+ | 构建系统 |
| OpenCV | 4.x | C++ 开发库 |
Linux(以 Ubuntu 为例):
# 安装编译工具和 OpenCV
sudo apt update
sudo apt install build-essential cmake libopencv-dev
# 编译运行
cd C++_Version
mkdir build && cd build
cmake ..
make
./C___VersionmacOS:
brew install cmake opencv
cd C++_Version
mkdir build && cd build
cmake ..
make
./C___VersionWindows:
- 安装 CMake 和 Visual Studio(勾选"使用 C++ 的桌面开发")。
- 从 OpenCV 官网 下载 Windows 预编译包,解压并配置环境变量。
- 在
CMakeLists.txt中设置OpenCV_DIR指向你的 OpenCV 安装路径:
mkdir build && cd build
cmake .. -DOpenCV_DIR="C:/opencv/build"
cmake --build .以下 7 节课程从零开始讲解 OpenCV 核心概念,建议按顺序学习。每节课程包含可运行的 Python 脚本和中文理论笔记。
📝 理论笔记:
1.计算机中图像的存在形式
学习目标: 理解图像在计算机中如何以 NumPy 数组的形式存储(BGR 三通道),掌握 OpenCV 的三种 I/O 操作。
| 文件 | 功能 | 关键 API |
|---|---|---|
io_image.py |
读取图片、显示窗口、按任意键关闭、保存图片 | cv2.imread(), cv2.imshow(), cv2.imwrite() |
io_video.py |
读取视频文件、逐帧播放、按 q 退出 |
cv2.VideoCapture(), cap.read() |
io_wecam.py |
调用默认摄像头、实时显示画面、按 q 退出 |
cv2.VideoCapture(0), cap.release() |
关键要点:
- OpenCV 默认读取的图像格式为 BGR(非 RGB),与 Matplotlib 等库的 RGB 格式不兼容,显示前需用
cv2.cvtColor()转换。 - 视频本质上是一帧帧图像的序列,
cap.read()每次返回一帧。
📝 理论笔记:
图像操作
学习目标: 掌握对图像的裁剪与缩放操作,理解 NumPy 切片索引和 OpenCV 插值方法。
| 文件 | 功能 | 关键 API |
|---|---|---|
crop.py |
通过 NumPy 切片裁剪图像的 ROI(感兴趣区域) | img[y1:y2, x1:x2] |
resizing.py |
按比例或指定尺寸缩放图像 | cv2.resize(), cv2.INTER_AREA, cv2.INTER_LINEAR |
关键要点:
- 图像裁剪本质是对 NumPy 数组的切片操作,格式为
img[行:行, 列:列]。 - 放大时推荐
cv2.INTER_LINEAR(双线性插值),缩小时推荐cv2.INTER_AREA(区域插值),后者能有效抑制摩尔纹。
📝 理论笔记:
色彩空间
学习目标: 理解 BGR、HSV、GRAY 等色彩空间的差异与适用场景,掌握颜色阈值筛选的基本思路。
| 文件 | 功能 | 关键 API |
|---|---|---|
Colar space.py |
BGR ↔ HSV 转换、颜色筛选 | cv2.cvtColor(), cv2.COLOR_BGR2HSV, cv2.inRange() |
关键要点:
- HSV 色彩空间将色调(Hue)、饱和度(Saturation)、亮度(Value)分离,使颜色筛选不受光照强度干扰,是后续装甲板检测的核心基础。
cv2.inRange()设定 HSV 上下界,生成二值 mask,这一模式贯穿整个周训项目。
📝 理论笔记:
图像模糊处理
学习目标: 理解低通滤波的降噪原理,区分均值模糊与高斯模糊的适用场景。
| 文件 | 功能 | 关键 API |
|---|---|---|
blur.py |
均值模糊(Box Blur) | cv2.blur() |
GaussianBlur.py |
高斯模糊 | cv2.GaussianBlur() |
关键要点:
- 均值模糊对邻域内所有像素赋予相同权重,速度快但细节损失大。
- 高斯模糊按正态分布分配权重,中心像素权重更高,边缘保留效果更好,是边缘检测前的标准预处理步骤。
- 核大小(kernel size)必须为正奇数(如 3×3、5×5、7×7),核越大模糊效果越强。
📝 理论笔记:
图像阈值处理
学习目标: 掌握全局阈值与自适应阈值的原理,能根据实际光照条件选择合适的二值化策略。
| 文件 | 功能 | 关键 API |
|---|---|---|
Threshold.py |
全局二值化阈值处理 | cv2.threshold(), cv2.THRESH_BINARY, cv2.THRESH_OTSU |
adaptive_threshold.py |
自适应二值化阈值处理 | cv2.adaptiveThreshold(), cv2.ADAPTIVE_THRESH_GAUSSIAN_C |
关键要点:
- 全局阈值用单一阈值处理整张图像,适用于光照均匀的场景。配合 OTSU 算法可自动计算最优阈值。
- 自适应阈值根据每个像素的局部邻域动态计算阈值,光照不均匀时表现更好。在装甲板检测中,这是应对复杂光照环境的重要工具。
📝 理论笔记:
边缘检测、形态学变化
学习目标: 掌握 Canny 边缘检测原理,理解膨胀、腐蚀、开运算、闭运算在图像预处理和后处理中的作用。
| 文件 | 功能 | 关键 API |
|---|---|---|
Edge detection.py |
Canny 边缘检测 | cv2.Canny() |
关键要点:
- Canny 边缘检测分为四步:高斯滤波降噪 → 梯度计算 → 非极大值抑制 → 双阈值滞后连接。
cv2.Canny()的两个阈值(threshold1、threshold2)比值通常设为 1:2 或 1:3:低于低阈值的被丢弃,高于高阈值的被保留,介于中间的仅当与强边缘相连时才保留。
形态学变换要点(理论笔记覆盖):
| 操作 | 效果 | API |
|---|---|---|
| 膨胀(Dilation) | 扩大白色区域,填充细小空洞 | cv2.dilate() |
| 腐蚀(Erosion) | 缩小白色区域,消除细小噪点 | cv2.erode() |
| 开运算(Opening) | 先腐蚀后膨胀,去除孤立噪点 | cv2.morphologyEx(..., cv2.MORPH_OPEN) |
| 闭运算(Closing) | 先膨胀后腐蚀,填充目标内部孔洞 | cv2.morphologyEx(..., cv2.MORPH_CLOSE) |
装甲板检测中通常使用开运算清除轮廓噪点,闭运算连接断裂的灯条。
🖼️ 输出示例:
hello_icbk_drawing.png
学习目标: 掌握 OpenCV 的绘图与文字渲染能力,能快速可视化检测结果和调试信息。
| 文件 | 功能 | 关键 API |
|---|---|---|
drawing.py |
矩形、圆形、椭圆、直线、箭头绘制 + 中文/英文文字渲染(含旋转、阴影效果) | cv2.rectangle(), cv2.circle(), cv2.ellipse(), cv2.line(), cv2.arrowedLine(), cv2.putText(), cv2.getRotationMatrix2D() |
关键要点:
- 所有绘图函数直接在原图上修改(in-place),绘图前应使用
img.copy()做备份。 cv2.putText()支持英文但不原生支持中文,如需渲染中文需配合 PIL/Pillow 转换。本项目示例中已提供替代方案。- 装甲板检测的可视化输出(锁定框、中心点、标签)正是建立在 Lesson 7 这些绘图 API 之上的。
ICBK 算法组周训项目是本仓库的核心实战内容,以 RoboMaster 竞技机器人中的装甲板检测为核心任务,从基础的 HSV 色彩筛选出发,逐步引入多策略融合、轮廓几何分析、卡尔曼滤波跟踪等技术,完整展示了一个视觉检测系统从原型到优化的迭代过程。
核心议题: 如何在 HSV 色彩空间中精确筛选目标颜色?
装甲板检测的第一步是找到图像中特定颜色的灯条(通常为红色或蓝色)。第二周的任务是掌握 HSV 颜色空间下的阈值筛选方法。
| 文件 | 功能 |
|---|---|
HSVfinding.py |
HSV 颜色范围计算工具——通过滑动条(trackbar)交互式调节 H/S/V 的上下界,实时查看 mask 效果,帮助快速确定目标颜色的阈值范围。这是整个装甲板检测系列中反复复用的核心工具。 |
识别颜色.py |
使用确定的 HSV 阈值对图像进行颜色筛选,提取特定颜色区域。 |
色彩检测.txt |
理论笔记 |
关键 API 与思路:
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # BGR → HSV
mask = cv2.inRange(hsv, lower_bound, upper_bound) # 颜色筛选
result = cv2.bitwise_and(frame, frame, mask=mask) # 按 mask 提取
⚠️ 不同光照条件下同一颜色的 HSV 值会有差异,实际比赛中需要在比赛场地现场调参。HSVfinding.py的交互式调参就是为了解决这个问题。
核心议题: 如何从颜色区域中定位装甲板的灯条?
在确定颜色范围后,第三周的任务是将筛选出的颜色区域转化为装甲板灯条的几何定位——这是从"颜色检测"到"目标检测"的关键一步。
| 文件 | 功能 |
|---|---|
装甲板.py |
图像级装甲板检测:HSV 筛选 → 轮廓提取 → 几何条件过滤 → 灯条匹配 → 绘制 bounding box |
装甲板视频流.py |
将图像检测流程扩展到视频流,逐帧检测 |
问题汇总 |
开发过程中遇到的问题与解决方案记录 |
v1.0 检测流程:
输入图像 → HSV 颜色筛选 → 二值 mask → 形态学开运算(去噪)
→ 轮廓检测 (cv2.findContours) → 几何条件过滤
→ 灯条两两配对 → 生成装甲板候选区域 → 绘制结果
v1.0 的局限性:
- 光照鲁棒性差:单一 HSV 阈值无法适应光照剧烈变化的场景,会出现大量漏检或误检。
- 灯条匹配规则简单:仅基于几何位置关系(左右、高度对齐)做匹配,未考虑灯条的角度倾斜。
- 缺少时序信息:逐帧独立检测,相邻帧之间没有关联,目标不稳定时 bounding box 会剧烈跳动。
核心议题: 如何提高复杂光照下的检测鲁棒性?如何让灯条匹配更准确?
第四周对 v1.0 进行了两轮迭代改进,重点解决光照适应性和灯条匹配精度。
| 文件 | 迭代版本 | 主要改进 |
|---|---|---|
装甲板改良2.0.py |
v2.0 | 引入 HSV 通道分离分析,对不同光照条件使用不同的筛选策略;增加轮廓面积、长宽比、倾斜角的过滤条件 |
装甲板改良3.0.py |
v3.0 | 改进灯条配对逻辑:加入倾斜角度一致性判断(两条灯条倾角应接近)和高度比例匹配(排除尺寸差异过大的误匹配) |
装甲板视频流改良1.0.py |
视频流改良 | 在视频流中集成 v3.0 逻辑,增加帧间稳定性处理 |
v2.0 关键改进点:
- 将 HSV 三通道拆开分析,分别对 H(色调)、S(饱和度)、V(亮度)设置不同的筛选条件,而不是用一个固定的 3D 区间。
- 对
cv2.findContours()提取的轮廓增加多层几何过滤:
| 过滤条件 | 作用 |
|---|---|
轮廓面积(cv2.contourArea) |
过滤过小的噪点区域 |
| 最小外接矩形长宽比 | 灯条通常为细长矩形,过滤正方形或不规则区域 |
| 矩形倾斜角 | 灯条在图像中通常接近竖直方向 |
v3.0 关键改进点——灯条配对逻辑:
v3.0 的核心突破在于灯条配对不再仅靠"左右位置关系",而是引入多维几何一致性:
- 倾斜角一致性:两块灯条应在相近的方向上倾斜(倾角差异小于阈值),否则不配对。
- 高度比例匹配:两块灯条的 bounding box 高度应接近(比例在 0.7~1.3 范围内),排除一大一小的误匹配。
- 水平偏移限制:两块灯条的水平间距应在合理范围内(对应实际装甲板的物理尺寸比例)。
核心议题: 单一颜色筛选不够——融合多种特征通道能否大幅提高检测质量?
第五周是本仓库中装甲板检测的集大成之作,将前几周的技术积累汇聚到一个综合脚本中。文件 HSV加二值化装甲板识别.py 是整个仓库体量最大的脚本(约 7.6 KB)。
核心思路——双通道融合:
┌─ 通道 1: HSV 颜色筛选 ─────────────┐
输入图像 │ • 提取指定颜色的灯条区域 │
│ │ • 应对颜色鲜明的场景 │
│ │ │
├── 预处理 ──────┤ ├── mask 融合 ──→ 轮廓分析 ──→ 装甲板定位
│ │ │
│ └─ 通道 2: 二值化阈值 ─────────────────┘
│ • 全局/自适应阈值提取高亮区域
│ • 应对过曝或颜色衰减的场景
融合策略: 两个通道各自生成二值 mask,然后按位或(cv2.bitwise_or)合并——只要任一通道检测到灯条区域即被保留,大大降低了漏检率。
融合后的后处理链:
融合 mask → 形态学闭运算(连接近邻区域)→ 开运算(清除毛刺)
→ 轮廓检测 → 几何过滤(面积/长宽比/倾斜角/凸性)
→ 颜色判定(红色/蓝色装甲板区分)
→ 灯条配对 → bounding box + 标签绘制
为什么双通道融合比单通道好?
| 场景 | HSV 通道 | 二值化通道 | 融合结果 |
|---|---|---|---|
| 光线良好、颜色鲜明 | ✅ 精准定位 | ✅ 辅助验证 | ✅ 双重确认 |
| 光线过暗、颜色衰退 | ❌ 检测不到 | ✅ 仍能捕获高亮灯条 | ✅ 单通道也可以 |
| 强光过曝 | ❌ 颜色冲淡 | ✅ 高亮区域突出 | ✅ 单通道也可以 |
| 背景杂色干扰 | ❌ 背景高亮也误检 | ✅ 双通道取交集去噪 |
核心议题: 检测不是终点——如何让装甲板在连续帧中的位置平滑稳定?
前几周的装甲板检测都是逐帧独立进行的,没有利用帧间的时序信息。第十二周引入卡尔曼滤波,实现了对装甲板位置的运动估计与预测。
什么是卡尔曼滤波?
卡尔曼滤波是一种递归的最优状态估计算法,能根据系统的运动模型预测下一时刻的状态,再结合实际测量值进行修正。在装甲板检测场景中:
- 状态向量(6 维):
[x, y, vx, vy, ax, ay]—— 位置、速度、加速度 - 测量向量(2 维):
[x, y]—— 由检测算法输出的装甲板中心坐标 - 预测阶段: 根据上一帧的
(x, y, vx, vy, ax, ay)估计当前帧的位置 - 更新阶段: 用实际检测到的
(x, y)修正预测值,得到最优估计
| 文件 | 功能 |
|---|---|
kalmanfilter.py |
自定义 KalmanFilter 类:基于 OpenCV cv2.KalmanFilter 封装,6 状态 2 测量,包含 predict() 预测和 correct() 校正方法 |
box.py |
边界框辅助类,用于存储和管理目标位置信息 |
mian.py |
图像级目标跟踪:每帧先预测 → 检测 → 校正(Predict-Detect-Correct 循环) |
mian_video.py |
视频流级目标跟踪 |
卡尔曼滤波带来的改进:
- 平滑跳动:当检测偶尔失败时,卡尔曼滤波用预测值维持跟踪,避免 bounding box 消失或跳跃。
- 运动预测:可以提前估计下一帧的装甲板位置,为云台控制提供前馈信息(这对射击决策至关重要)。
- 噪声抑制:检测结果中的随机噪声(如光照引起的轻微位置偏移)被滤波器平滑处理。
下表总结了装甲板检测系统在 5 周内的技术演进轨迹:
| 周次 | 版本 | 核心技术 | 要解决的问题 | 遗留不足 |
|---|---|---|---|---|
| 第 2 周 | — | HSV 色彩筛选基础 | 如何找到特定颜色的区域? | 仅有颜色,无法定位灯条 |
| 第 3 周 | v1.0 | 轮廓检测 + 几何过滤 + 灯条配对 | 如何从颜色区域中定位灯条和装甲板? | 光照鲁棒性差,配对规则简单 |
| 第 4 周 | v2.0 | 通道分离分析 + 多层几何过滤 | 如何适应不同光照条件? | 单通道仍有漏检 |
| 第 4 周 | v3.0 | 倾斜角一致性 + 高度比例匹配 | 如何提高灯条配对精度? | 极端光照下仍然不足 |
| 第 5 周 | v4.0 | HSV + 二值化双通道融合 | 如何大幅降低漏检率? | 实时性有优化空间 |
| 第 12 周 | — | 卡尔曼滤波跟踪 | 如何在连续帧中平滑位置并预测运动? | 需配合稳定的检测模块 |
📦 数据集:
data/mnist.npz(11.5 MB,MNIST 手写数字 60,000 训练 + 10,000 测试)
第十三周的内容独立于装甲板检测主线,是一个从零开始用 NumPy 手写神经网络的教学项目。不使用任何深度学习框架(TensorFlow/PyTorch),用纯 NumPy 实现前向传播与反向传播。
关键文件:
| 文件 | 功能 |
|---|---|
train.py |
从数据加载到训练、测试的完整流程 |
网络结构:
输入层 (784) → 隐藏层 (20, Sigmoid) → 输出层 (10, Softmax)
实现细节:
- 数据加载器: 从
data/mnist.npz读取并归一化至[0, 1]区间。 - 前向传播: 矩阵乘法 → Sigmoid / Softmax 激活。
- 反向传播: 链式求导,手动计算交叉熵损失对每层参数的梯度。
- 参数更新: 梯度下降法更新权重矩阵与偏置向量。
- 测试评估: 在测试集上计算准确率。
学习价值: 这个项目展示了深度学习框架底层的工作原理——矩阵乘法、激活函数、梯度反向传播、参数更新——这些概念在 PyTorch/TensorFlow 中被封装在 API 背后,而这里把它们全部亲手实现了一遍。对于想理解"神经网络到底在做什么"的学习者来说,这是非常宝贵的参考资料。
如果你是初学者,推荐按以下顺序逐步学习:
┌──────────────────────────────┐
│ 🟢 入门阶段 │
│ │
Lesson 1 ────→ Lesson 2 ────→ Lesson 3 │
(图像 I/O) (裁剪/缩放) (色彩空间) │
│ │
└──────────────┬───────────────┘
│
┌──────────────▼───────────────┐
│ 🟡 进阶阶段 │
│ │
Lesson 4 ────→ Lesson 5 ────→ Lesson 6 │
(模糊/滤波) (阈值处理) (边缘/形态学) │
│ │
└──────────────┬───────────────┘
│
┌──────────────▼───────────────┐
│ 🔵 综合应用 │
│ │
Lesson 7 ────→ 第二周 ────→ 第三周 │
(绘图/文字) (HSV检测) (装甲板 v1) │
│ │
└──────────────┬───────────────┘
│
┌──────────────▼───────────────┐
│ 🔴 深入优化 │
│ │
第四周 ────→ 第五周 ────→ 第十二周 │
(v2/v3) (双通道融合) (卡尔曼滤波) │
│ │
└──────────────┬───────────────┘
│
┌──────────────▼───────────────┐
│ 🟣 扩展探索 │
│ │
第十三周(从零实现神经网络) │
│ │
└──────────────────────────────┘
- 先做 Lesson 1-3,掌握图像读写、色彩空间转换、基本的 numpy 操作。
- 再做 Lesson 4-6,理解滤波、阈值和边缘检测——这些都是装甲板检测的前置技能。
- 然后看 Lesson 7,学会绘图和文字渲染,这对可视化调试至关重要。
- 接着进入第二周,用
HSVfinding.py交互式地探索不同颜色的 HSV 范围,这是整个装甲板检测的起点。 - 按周序推进第三、四、五周,关注每个版本的改进动机和具体实现差异,尝试在本地运行这些脚本并用自己的视频测试效果。
- 最后看第十二周,理解卡尔曼滤波的预测-校正循环如何让目标跟踪变得更平滑。
- 有余力再探索第十三周,这是一个独立方向,适合对深度学习底层原理感兴趣的学习者。
💡 学习建议: 不要只看代码。每个脚本都可以独立运行——动手改参数、换自己的图片/视频、观察输出变化,才是真正掌握的关键。
- GitHub: mc260
- 邮箱: 2637936786@qq.com
如有问题或建议,欢迎提 Issue 或 PR。
Made with ❤️ by mc260 | 2025 — 2026