1. 项目概述
这个基于HOG+SVM的行人检测系统是我在毕业设计期间完成的一个完整项目,从数据集准备到模型训练再到可视化界面开发,涵盖了计算机视觉项目开发的全流程。使用C++作为开发语言,搭配OpenCV3.4.10计算机视觉库和VS2015开发环境,最终通过Qt框架实现了用户友好的交互界面。
项目最大的特点就是"开箱即用"——不仅提供了完整的代码实现,还包含了经过预处理的正负样本数据集(2000张正样本+6000张负样本),以及详细的Word版操作说明书。对于刚接触计算机视觉的开发者来说,这个项目可以作为一个很好的学习案例,了解从理论到实践的完整实现过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境搭建
2.1 基础环境配置
在开始项目前,需要确保开发环境正确配置。我使用的是Visual Studio 2015 Community版,搭配OpenCV 3.4.10。这里有几个关键配置点需要注意:
- OpenCV的安装路径最好不要包含中文或空格
- 配置项目属性时,需要正确设置包含目录、库目录和附加依赖项
- 平台工具集要选择与OpenCV编译版本一致的选项(v140对应VS2015)
提示:OpenCV官方提供的预编译版本可能不包含某些模块,如果需要使用全部功能,建议从源码自行编译。
2.2 Qt环境配置
Qt框架用于开发可视化界面,我使用的是Qt5.9版本。配置时需要注意:
- 安装Qt时勾选MSVC2015 32-bit组件(与VS2015匹配)
- 在VS2015中安装Qt VS Tools扩展
- 配置Qt版本路径时,确保指向正确的qmake.exe位置
2.3 C++语言标准设置
项目中使用了C++17的filesystem库来处理文件系统操作,需要在项目属性中显式设置:
- 右键项目 -> 属性 -> C/C++ -> 语言
- 将"C++语言标准"设置为"ISO C++17标准(/std:c++17)"
- 链接器 -> 输入中添加"legacy_stdio_definitions.lib"
3. 数据集准备
3.1 正样本采集与处理
正样本是指包含清晰行人形象的图片,我使用的数据集主要来自INRIA Person Dataset和自行收集的部分图片。正样本处理的关键步骤如下:
- 统一尺寸:所有正样本必须调整为64×128像素,这是HOG特征的标准输入尺寸
- 格式转换:将不同来源的图片统一转换为.jpg或.png格式
- 灰度归一化:虽然HOG会自动处理,但建议先进行直方图均衡化
cpp复制// 正样本预处理代码示例
cv::Mat img = cv::imread("input.jpg");
cv::Mat resized_img;
cv::resize(img, resized_img, cv::Size(64, 128));
cv::Mat gray_img;
cv::cvtColor(resized_img, gray_img, cv::COLOR_BGR2GRAY);
cv::equalizeHist(gray_img, gray_img);
cv::imwrite("output.jpg", gray_img);
3.2 负样本采集与处理
负样本是指不包含行人的背景图片,我主要从以下来源获取:
- 城市街景图片(确保不包含任何行人)
- 室内场景图片
- 自然风景图片
负样本处理相对简单,只需确保尺寸一致即可,但要注意:
- 负样本数量应多于正样本(我采用1:3的比例)
- 必须严格检查确保没有漏网的行人
- 建议从不同场景采集,增加多样性
3.3 数据集增强技巧
为了提高模型鲁棒性,可以采用以下数据增强技术:
- 镜像翻转:对正样本水平翻转,可有效增加数据量
- 轻微旋转:±5度内的随机旋转
- 添加噪声:高斯噪声或椒盐噪声
- 亮度调整:±20%范围内的随机调整
cpp复制// 数据增强示例:水平翻转
cv::Mat flipped_img;
cv::flip(original_img, flipped_img, 1); // 1表示水平翻转
4. HOG特征提取
4.1 HOG参数详解
HOG(Histogram of Oriented Gradients)是一种用于物体检测的特征描述子。在OpenCV中,HOGDescriptor类提供了完整的实现。关键参数包括:
- winSize:检测窗口大小(64×128)
- blockS
