Skip to content

About

从零开始的 OpenCV 计算机视觉学习笔记与项目实战 涵盖图像处理基础到 RoboMaster 装甲板检测的完整学习路线

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

28 Commits

Folders and files

Repository files navigation

🖼️ OpenCV-Learning

Python OpenCV NumPy CMake License

从零开始的 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 环境

环境要求: Python 3.8 及以上版本。

1. 克隆仓库

git clone https://github.com/mc260/Opencv-Learning.git
cd Opencv-Learning

2. 创建虚拟环境(推荐)

# 方式一:使用 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-learn

3. 安装依赖

pip install -r requirements.txt

requirements.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++ 版本示例位于 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___Version

macOS:

brew install cmake opencv
cd C++_Version
mkdir build && cd build
cmake ..
make
./C___Version

Windows:

  1. 安装 CMake 和 Visual Studio(勾选"使用 C++ 的桌面开发")。
  2. 从 OpenCV 官网 下载 Windows 预编译包,解压并配置环境变量。
  3. 在 CMakeLists.txt 中设置 OpenCV_DIR 指向你的 OpenCV 安装路径:
mkdir build && cd build
cmake .. -DOpenCV_DIR="C:/opencv/build"
cmake --build .

基础教程

以下 7 节课程从零开始讲解 OpenCV 核心概念,建议按顺序学习。每节课程包含可运行的 Python 脚本和中文理论笔记。

Lesson 1:图像输入输出与数据表示

📝 理论笔记: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() 每次返回一帧。

Lesson 2:图像基本操作

📝 理论笔记:图像操作

学习目标: 掌握对图像的裁剪与缩放操作,理解 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(区域插值),后者能有效抑制摩尔纹。

Lesson 3:色彩空间

📝 理论笔记:色彩空间

学习目标: 理解 BGR、HSV、GRAY 等色彩空间的差异与适用场景,掌握颜色阈值筛选的基本思路。

文件 功能 关键 API
Colar space.py BGR ↔ HSV 转换、颜色筛选 cv2.cvtColor(), cv2.COLOR_BGR2HSV, cv2.inRange()

关键要点:

  • HSV 色彩空间将色调(Hue)、饱和度(Saturation)、亮度(Value)分离,使颜色筛选不受光照强度干扰,是后续装甲板检测的核心基础。
  • cv2.inRange() 设定 HSV 上下界,生成二值 mask,这一模式贯穿整个周训项目。

Lesson 4:图像模糊与滤波

📝 理论笔记:图像模糊处理

学习目标: 理解低通滤波的降噪原理,区分均值模糊与高斯模糊的适用场景。

文件 功能 关键 API
blur.py 均值模糊(Box Blur) cv2.blur()
GaussianBlur.py 高斯模糊 cv2.GaussianBlur()

关键要点:

  • 均值模糊对邻域内所有像素赋予相同权重,速度快但细节损失大。
  • 高斯模糊按正态分布分配权重,中心像素权重更高,边缘保留效果更好,是边缘检测前的标准预处理步骤。
  • 核大小(kernel size)必须为正奇数(如 3×3、5×5、7×7),核越大模糊效果越强。

Lesson 5:图像阈值处理

📝 理论笔记:图像阈值处理

学习目标: 掌握全局阈值与自适应阈值的原理,能根据实际光照条件选择合适的二值化策略。

文件 功能 关键 API
Threshold.py 全局二值化阈值处理 cv2.threshold(), cv2.THRESH_BINARY, cv2.THRESH_OTSU
adaptive_threshold.py 自适应二值化阈值处理 cv2.adaptiveThreshold(), cv2.ADAPTIVE_THRESH_GAUSSIAN_C

关键要点:

  • 全局阈值用单一阈值处理整张图像,适用于光照均匀的场景。配合 OTSU 算法可自动计算最优阈值。
  • 自适应阈值根据每个像素的局部邻域动态计算阈值,光照不均匀时表现更好。在装甲板检测中,这是应对复杂光照环境的重要工具。

Lesson 6:边缘检测与形态学变换

📝 理论笔记:边缘检测、形态学变化

学习目标: 掌握 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)

装甲板检测中通常使用开运算清除轮廓噪点,闭运算连接断裂的灯条。


Lesson 7:绘图与文字

🖼️ 输出示例: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 算法组周训项目

ICBK 算法组周训项目是本仓库的核心实战内容,以 RoboMaster 竞技机器人中的装甲板检测为核心任务,从基础的 HSV 色彩筛选出发,逐步引入多策略融合、轮廓几何分析、卡尔曼滤波跟踪等技术,完整展示了一个视觉检测系统从原型到优化的迭代过程。

第二周: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 的交互式调参就是为了解决这个问题。


第三周:装甲板检测 v1.0

核心议题: 如何从颜色区域中定位装甲板的灯条?

在确定颜色范围后,第三周的任务是将筛选出的颜色区域转化为装甲板灯条的几何定位——这是从"颜色检测"到"目标检测"的关键一步。

文件 功能
装甲板.py 图像级装甲板检测:HSV 筛选 → 轮廓提取 → 几何条件过滤 → 灯条匹配 → 绘制 bounding box
装甲板视频流.py 将图像检测流程扩展到视频流,逐帧检测
问题汇总 开发过程中遇到的问题与解决方案记录

v1.0 检测流程:

输入图像 → HSV 颜色筛选 → 二值 mask → 形态学开运算(去噪)
→ 轮廓检测 (cv2.findContours) → 几何条件过滤
→ 灯条两两配对 → 生成装甲板候选区域 → 绘制结果

v1.0 的局限性:

  1. 光照鲁棒性差:单一 HSV 阈值无法适应光照剧烈变化的场景,会出现大量漏检或误检。
  2. 灯条匹配规则简单:仅基于几何位置关系(左右、高度对齐)做匹配,未考虑灯条的角度倾斜。
  3. 缺少时序信息:逐帧独立检测,相邻帧之间没有关联,目标不稳定时 bounding box 会剧烈跳动。

第四周:装甲板检测 v2.0 → v3.0

核心议题: 如何提高复杂光照下的检测鲁棒性?如何让灯条匹配更准确?

第四周对 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 的核心突破在于灯条配对不再仅靠"左右位置关系",而是引入多维几何一致性:

  1. 倾斜角一致性:两块灯条应在相近的方向上倾斜(倾角差异小于阈值),否则不配对。
  2. 高度比例匹配:两块灯条的 bounding box 高度应接近(比例在 0.7~1.3 范围内),排除一大一小的误匹配。
  3. 水平偏移限制:两块灯条的水平间距应在合理范围内(对应实际装甲板的物理尺寸比例)。

第五周:HSV + 二值化双通道融合

核心议题: 单一颜色筛选不够——融合多种特征通道能否大幅提高检测质量?

第五周是本仓库中装甲板检测的集大成之作,将前几周的技术积累汇聚到一个综合脚本中。文件 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 视频流级目标跟踪

卡尔曼滤波带来的改进:

  1. 平滑跳动:当检测偶尔失败时,卡尔曼滤波用预测值维持跟踪,避免 bounding box 消失或跳跃。
  2. 运动预测:可以提前估计下一帧的装甲板位置,为云台控制提供前馈信息(这对射击决策至关重要)。
  3. 噪声抑制:检测结果中的随机噪声(如光照引起的轻微位置偏移)被滤波器平滑处理。

技术演进总览

下表总结了装甲板检测系统在 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)

实现细节:

  1. 数据加载器: 从 data/mnist.npz 读取并归一化至 [0, 1] 区间。
  2. 前向传播: 矩阵乘法 → Sigmoid / Softmax 激活。
  3. 反向传播: 链式求导,手动计算交叉熵损失对每层参数的梯度。
  4. 参数更新: 梯度下降法更新权重矩阵与偏置向量。
  5. 测试评估: 在测试集上计算准确率。

学习价值: 这个项目展示了深度学习框架底层的工作原理——矩阵乘法、激活函数、梯度反向传播、参数更新——这些概念在 PyTorch/TensorFlow 中被封装在 API 背后,而这里把它们全部亲手实现了一遍。对于想理解"神经网络到底在做什么"的学习者来说,这是非常宝贵的参考资料。


建议学习路线

如果你是初学者,推荐按以下顺序逐步学习:

                        ┌──────────────────────────────┐
                        │       🟢 入门阶段              │
                        │                              │
          Lesson 1 ────→ Lesson 2 ────→ Lesson 3       │
          (图像 I/O)     (裁剪/缩放)    (色彩空间)       │
                        │                              │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │       🟡 进阶阶段              │
                        │                              │
          Lesson 4 ────→ Lesson 5 ────→ Lesson 6       │
          (模糊/滤波)    (阈值处理)     (边缘/形态学)     │
                        │                              │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │       🔵 综合应用              │
                        │                              │
          Lesson 7 ────→ 第二周 ────→ 第三周            │
          (绘图/文字)    (HSV检测)     (装甲板 v1)       │
                        │                              │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │       🔴 深入优化              │
                        │                              │
          第四周 ────→ 第五周 ────→ 第十二周             │
          (v2/v3)      (双通道融合)   (卡尔曼滤波)        │
                        │                              │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │       🟣 扩展探索              │
                        │                              │
                        第十三周(从零实现神经网络)       │
                        │                              │
                        └──────────────────────────────┘
  1. 先做 Lesson 1-3,掌握图像读写、色彩空间转换、基本的 numpy 操作。
  2. 再做 Lesson 4-6,理解滤波、阈值和边缘检测——这些都是装甲板检测的前置技能。
  3. 然后看 Lesson 7,学会绘图和文字渲染,这对可视化调试至关重要。
  4. 接着进入第二周,用 HSVfinding.py 交互式地探索不同颜色的 HSV 范围,这是整个装甲板检测的起点。
  5. 按周序推进第三、四、五周,关注每个版本的改进动机和具体实现差异,尝试在本地运行这些脚本并用自己的视频测试效果。
  6. 最后看第十二周,理解卡尔曼滤波的预测-校正循环如何让目标跟踪变得更平滑。
  7. 有余力再探索第十三周,这是一个独立方向,适合对深度学习底层原理感兴趣的学习者。

💡 学习建议: 不要只看代码。每个脚本都可以独立运行——动手改参数、换自己的图片/视频、观察输出变化,才是真正掌握的关键。


参考资源


联系方式

如有问题或建议,欢迎提 Issue 或 PR。


Made with ❤️ by mc260 | 2025 — 2026

About

从零开始的 OpenCV 计算机视觉学习笔记与项目实战 涵盖图像处理基础到 RoboMaster 装甲板检测的完整学习路线

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages