本仓库包含计算机视觉课程的全部4个实验项目,涵盖了图像处理、目标检测、深度学习等多个计算机视觉核心领域。每个实验都包含完整的源代码、实验报告、运行结果和详细文档。
实验内容:实现图像的灰度化、卷积滤波、边缘检测和纹理特征提取。
核心技术:
- 手动实现2D卷积(不使用库函数)
- Sobel算子边缘检测
- 自定义卷积核K设计
- 直方图统计(手动实现)
- 纹理特征提取(9种统计特征)
主要成果:
- 成功实现灰度化转换
- 手工实现2D卷积操作
- Sobel边缘检测效果良好
- 提取9种纹理特征(均值、标准差、能量、熵等)
技术栈:Python NumPy OpenCV Matplotlib
实验内容:使用图像处理技术检测道路图像中的车道线。
核心技术:
- 高斯滤波降噪
- Canny边缘检测
- 感兴趣区域(ROI)提取
- Hough变换直线检测
- 车道线拟合与绘制
主要成果:
- 成功检测左右车道线
- 准确的直线拟合
- 鲁棒的ROI设计
- 适用于多种道路场景
技术栈:Python OpenCV NumPy
实验内容:使用深度学习识别手写学号照片中的数字。
核心技术:
- 卷积神经网络(CNN)设计与训练
- MNIST数据集训练
- 图像预处理(灰度化、二值化、形态学操作)
- 轮廓检测与数字分割
- 端到端识别流程
主要成果:
- MNIST测试集准确率:99.12%
- 学号识别成功率:10/10 (100%)
- 平均置信度:96.1%
- 模型参数量:304,266
技术栈:Python PyTorch OpenCV NumPy
实验内容:使用YOLOv8深度学习模型检测校园场景中的共享单车。
核心技术:
- YOLOv8目标检测算法
- COCO数据集单类提取
- 模型训练与优化
- 实时目标检测与定位
- NMS后处理
主要成果:
- mAP50:60.45%
- Precision:69.05%
- 推理速度:67 FPS
- 模型大小:6.5MB(轻量级)
- 检测成功率:100% (2/2张测试图像)
技术栈:Python PyTorch YOLOv8 Ultralytics OpenCV
加分项:
- 使用深度学习方法
- 代码环境以姓名缩写命名(
cj) - 详细的环境配置文档
陈璟-2023217542/
├── README.md # 项目总说明(本文件)
│
├── 实验一/
│ └── image_filtering/ # 图像滤波实验
│ ├── main.py # 主程序
│ ├── orange.jpg # 测试图像
│ ├── outputs/ # 输出结果
│ ├── README.md # 实验说明
│ └── requirements.txt # 依赖列表
│
├── 实验二/
│ └── lane_detect/ # 车道检测实验
│ ├── lane_detect.py # 主程序
│ ├── data/ # 测试图像
│ ├── outputs/ # 检测结果
│ └── README.md # 实验说明
│
├── 实验三/
│ └── Student-ID-Recognition/ # 学号识别实验
│ ├── train_mnist.py # 训练脚本
│ ├── infer_student_id.py # 推理脚本
│ ├── model.py # CNN模型定义
│ ├── utils_image.py # 图像处理工具
│ ├── weights/ # 模型权重
│ ├── outputs/ # 识别结果
│ ├── README.md # 实验说明
│ └── requirements.txt # 依赖列表
│
└── 实验四/
└── Campus-Bike-Detection/ # 单车检测实验
├── scripts/ # 脚本目录
│ ├── train.py # 训练脚本
│ ├── val.py # 验证脚本
│ └── infer.py # 推理脚本
├── src/ # 源代码
│ └── utils.py # 工具函数
├── data/ # 数据配置
├── runs/ # 训练输出
├── outputs/ # 推理结果
├── README.md # 实验说明
├── 实验报告.md # 详细实验报告
└── requirements.txt # 依赖列表
- 操作系统: Windows 10/11, Linux, macOS
- Python: 3.8 - 3.10
- 内存: 建议 8GB+
- GPU: NVIDIA GPU
# 基础库
numpy>=1.20.0
opencv-python>=4.5.0
matplotlib>=3.3.0# PyTorch
torch>=1.10.0
torchvision>=0.11.0
# 实验四额外依赖
ultralytics>=8.3.0
pycocotools>=2.0.6每个实验目录都包含独立的 requirements.txt:
# 进入对应实验目录
cd 实验一/image_filtering/
# 安装依赖
pip install -r requirements.txtcd 实验一/image_filtering/
python main.py --image orange.jpgcd 实验二/lane_detect/
python lane_detect.py --image data/test.png --output outputs/cd 实验三/Student-ID-Recognition/
# 1. 训练模型
python train_mnist.py --epochs 5
# 2. 识别学号
python infer_student_id.py --image 2023217542.jpg --save_vis outputs/vis.jpgcd 实验四/Campus-Bike-Detection/
# 推理检测
python scripts/infer.py \
--weights runs/bicycle_exp/weights/best.pt \
--source bike.jpg \
--save_dir outputs/vis| 实验 | 主要指标 | 完成度 |
|---|---|---|
| 实验一 | 成功实现手工卷积和特征提取 | 100% |
| 实验二 | 车道检测准确率高 | 100% |
| 实验三 | MNIST准确率99.12%,学号识别100% | 100% |
| 实验四 | mAP50=60.45%, FPS=67 | 100% |
- 灰度转换
- Sobel边缘检测
- 自定义卷积核K滤波
- RGB/灰度图直方图
- 成功检测左右车道线
- 准确的直线拟合
- 适应不同道路场景
- 输入:手写学号照片
- 输出:识别结果
2023217542 - 可视化:每个数字的检测框和置信度
- 单目标检测(bike.jpg):置信度76.88%
- 多目标检测(bike2.jpg):2辆单车,置信度91.14%和75.28%
- 实时检测:67 FPS
- 手工实现2D卷积(不使用
cv2.filter2D) - 手工实现直方图统计(不使用
np.histogram) - 形态学操作(腐蚀、膨胀)
- Canny、Sobel边缘检测
- Hough变换直线检测
- 轮廓检测与分割
- ROI提取与变换
- 多尺度特征融合
- CNN网络设计(实验三:3层卷积+2层全连接)
- YOLOv8目标检测(实验四)
- 数据增强(Mosaic, MixUp)
- 迁移学习(预训练模型微调)
- 模块化代码设计
- 命令行参数解析(argparse)
- 结果可视化和保存
- 详细的文档和注释
- Python 3.10
- PyTorch 2.5.0
- Ultralytics YOLOv8
- OpenCV 4.6+
- PIL/Pillow
- NumPy
- Matplotlib
- JSON
- MNIST(手写数字数据集)
- COCO 2017(目标检测数据集)
每个实验都包含详细的实验报告,内容包括:
- 实验目的
- 算法原理(含数学公式推导)
- 代码实现
- 实验结果与分析
- 问题与解决方案
- 实验总结
报告格式:
- 实验一、二:Word文档(
.docx) - 实验三、四:Markdown文档(
.md)
通过这4个实验,我系统学习了:
- 图像处理基础:卷积、滤波、边缘检测、形态学操作
- 经典算法:Hough变换、Canny边缘检测、轮廓检测
- 深度学习:CNN、目标检测、模型训练与优化
- 工程能力:代码组织、文档编写、结果分析
- 问题解决:调试技巧、性能优化、错误分析
本项目仅用于课程实验,请遵守学术诚信原则。
感谢计算机视觉课程的老师和助教的指导!
感谢以下开源项目: