当前位置: 首页 > article >正文

基于C++、OpenCV与VS2015环境的HOG+SVM行人检测全套项目:含正负样本数据集、...

COpenCVVS2015HOGSVM行人检测项目一整套具体包括以下内容: 1.行人检测数据集正负样本 2.数据集准备模型训练模型测试视频测试和图片测试 3.界面使用Qt搭建可视化交互界面 代码操作流程说明书Word版刚把毕设收尾的HOGSVM行人检测项目翻出来整理了一遍从数据集准备到Qt可视化界面全流程撸完了用的是VS2015OpenCV3.4.10今天就把整个过程唠唠踩过的坑和能用的代码片段都给你们扒出来绝对不整那些干巴巴的论文套话。首先得先搞数据集这是最磨人的一步别嫌麻烦。正样本就是纯行人的图得统一缩成64*128像素这是HOG特征要求的输入尺寸我最开始偷懒没统一结果训练的时候直接报错说特征维度不对差点把我整崩溃。负样本就是不带行人的背景图比如街道、草地、车流啥的数量最好比正样本多一点我当时是1:3的比例大概2000张正样本配6000张负样本负样本找的时候一定要仔细别把行人混进去不然训练出来的模型会瞎识别。给你们看一段批量预处理正样本的代码当时我写了个小脚本干这个活#include opencv2/opencv.hpp #include iostream #include vector #include filesystem // 划重点VS2015默认不支持C17的filesystem记得去项目属性里把C语言标准改成C17或者更高不然编译的时候会报错找不到头文件 namespace fs std::filesystem; int main() { // 原始正样本文件夹和保存路径记得提前建好 std::string src_path ./raw_pos/; std::string save_path ./norm_pos/; if(!fs::exists(save_path)) fs::create_directory(save_path); for(auto entry : fs::directory_iterator(src_path)){ // 只处理jpg和png格式的图其他的跳过 if(entry.path().extension() ! .jpg entry.path().extension() ! .png) continue; cv::Mat img cv::imread(entry.path().string()); if(img.empty()) continue; cv::Mat resize_img; // 统一缩成64*128刚好符合HOG的输入尺寸 cv::resize(img, resize_img, cv::Size(64,128)); std::string save_name save_path entry.path().filename().string(); cv::imwrite(save_name, resize_img); } std::cout 正样本预处理搞定 std::endl; return 0; }这个代码其实挺直白的就是遍历文件夹里的所有图片统一缩成要求的尺寸负样本的预处理也是一样的逻辑只是不用抠图直接用原图缩就行毕竟负样本只要尺寸对就行。COpenCVVS2015HOGSVM行人检测项目一整套具体包括以下内容: 1.行人检测数据集正负样本 2.数据集准备模型训练模型测试视频测试和图片测试 3.界面使用Qt搭建可视化交互界面 代码操作流程说明书Word版接下来是模型训练用OpenCV自带的HOGSVM模块就行不用自己从头写特征提取省了好多事。我写了个封装好的特征提取函数重点来了所有参数必须和后面检测的时候完全一致一个都不能改不然特征维度对不上模型直接废了#include opencv2/opencv.hpp #include opencv2/ml.hpp using namespace cv; using namespace cv::ml; // 提取单张图片的HOG特征 Mat getHogFeature(const Mat img) { HOGDescriptor hog; // 这里的参数必须和检测时的参数完全一致 hog.winSize Size(64,128); hog.blockSize Size(16,16); hog.blockStride Size(8,8); hog.cellSize Size(8,8); hog.nbins 9; std::vectorfloat descriptors; hog.compute(img, descriptors, Size(8,8), Size(0,0)); Mat feature Mat(descriptors).clone(); return feature; }然后训练的主函数大概是这样的int trainModel() { // 先加载所有预处理好的正负样本这里省略遍历文件夹读图片的代码直接给个大概的逻辑 std::vectorMat pos_imgs, neg_imgs; // 读取norm_pos和norm_neg文件夹里的所有图片到vector里 Mat train_data, train_labels; // 正样本标签是1负样本是-1 for(auto img : pos_imgs){ Mat feat getHogFeature(img); if(feat.empty()) continue; // 把每个样本的特征按行拼到训练集里 train_data.push_back(feat); train_labels.push_back(1.0); } for(auto img : neg_imgs){ Mat feat getHogFeature(img); if(feat.empty()) continue; train_data.push_back(feat); train_labels.push_back(-1.0); } // 初始化SVM分类器 PtrSVM svm SVM::create(); svm-setType(SVM::C_SVC); svm-setKernel(SVM::LINEAR); svm-setTermCriteria(TermCriteria(TermCriteria::MAX_ITER | TermCriteria::EPS, 1000, 1e-6)); // 开始训练 svm-train(train_data, ROW_SAMPLE, train_labels); // 保存训练好的模型 svm-save(hog_svm_model.xml); std::cout 模型训练完成已保存 std::endl; return 0; }我当时第一次训练的时候就是改了blockStride的大小结果检测的时候一个行人都没找不出来调了快俩小时才发现是参数没对上血的教训。然后是模型测试单张图片测试的代码就更简单了直接加载模型然后用HOG自带的detectMultiScale来检测这个函数自带非极大值抑制不用自己写省了好多事// 单张图片检测 void detectSingleImg(const std::string img_path) { Mat img cv::imread(img_path); if(img.empty()){ std::cout 图片打不开啊 std::endl; return; } // 加载训练好的模型 PtrSVM svm SVM::load(hog_svm_model.xml); HOGDescriptor hog; // 参数必须和训练的时候完全一致 hog.winSize Size(64,128); hog.blockSize Size(16,16); hog.blockStride Size(8,8); hog.cellSize Size(8,8); hog.nbins 9; // 把SVM分类器加载到HOG里 hog.setSVMDetector(svm-getSupportVectors()); std::vectorRect found; // 检测行人框参数可以自己调比如缩放步长和置信度阈值 hog.detectMultiScale(img, found, 0, Size(8,8), Size(0,0), 1.05, 2); // 把检测到的框画在图上 for(auto rect : found){ cv::rectangle(img, rect, cv::Scalar(0,255,0), 2); } cv::imshow(行人检测结果, img); cv::waitKey(0); }视频检测的话就是用VideoCapture循环读每一帧调用上面的检测逻辑就行// 视频检测支持摄像头和本地视频文件 void detectVideo(const std::string video_path) { cv::VideoCapture cap(video_path); if(!cap.isOpened()){ std::cout 视频打不开 std::endl; return; } PtrSVM svm SVM::load(hog_svm_model.xml); HOGDescriptor hog; // 同样设置参数 Mat frame; while(cap.read(frame)){ if(frame.empty()) break; std::vectorRect found; hog.detectMultiScale(frame, found, 0, Size(8,8), Size(0,0), 1.05, 2); for(auto r : found) cv::rectangle(frame, r, cv::Scalar(0,255,0),2); cv::imshow(视频检测, frame); if(cv::waitKey(30)0) break; } }然后是Qt界面的部分这个是用来做可视化的我当时做了个简单的界面有选图片、选视频、检测的按钮还有显示结果的标签大概的Qt代码片段// Qt的MainWindow类里的槽函数选图片按钮的部分 void MainWindow::on_btn_selectImg_clicked() { QString img_path QFileDialog::getOpenFileName(this, 选择测试图片, ./, 图片文件(*.jpg *.png); if(img_path.isEmpty()) return; // 显示原图 ui-label_origin-setPixmap(QPixmap(img_path)); // 调用检测函数把结果转成QImage显示 Mat img cv::imread(img_path.toStdString()); // 检测代码和之前的一样然后把带框的图转成QImage QImage q_img QImage(img.data, img.cols, img.rows, img.step, QImage::Format_RGB888); ui-label_result-setPixmap(QPixmap::fromImage(q_img.rgbSwapped())); }搭Qt界面的时候还要注意把OpenCV的dll要放到Qt的编译输出目录里不然运行的时候找不到我当时就是把dll直接扔到了exe同目录下才解决的这个问题。最后还整理了一份Word版的操作说明书大概的目录是开发环境配置VS2015配置OpenCV、Qt5.x配置VS2015数据集准备正负样本收集、预处理代码模型训练代码使用说明单张/视频/图片测试代码使用说明Qt界面搭建步骤常见问题解决比如dll找不到、检测不出行人、特征维度不对其实这个项目虽然不算难但是踩过的坑还是挺多的比如一开始没统一样本尺寸、参数不一致、dll找不到这些要是你们也在做这个项目的话可以参考一下我上面的代码有啥问题也可以在评论区唠唠。

相关文章:

基于C++、OpenCV与VS2015环境的HOG+SVM行人检测全套项目:含正负样本数据集、...

C,OpenCV,VS2015,HOGSVM行人检测项目一整套,具体包括以下内容: 1.行人检测数据集,正负样本 2.数据集准备,模型训练,模型测试,视频测试和图片测试 3.界面,使用Qt搭建可视化…...

别只盯着对接分数!用PyMOL手把手教你目视筛查分子对接结果的3个关键点(氢键、疏水、应变能)

别只盯着对接分数!用PyMOL手把手教你目视筛查分子对接结果的3个关键点(氢键、疏水、应变能) 刚拿到分子对接结果时,很多初学者会陷入一个误区——过度关注对接分数(docking score)这个单一指标。实际上&…...

OpenClaw断点续跑:千问3.5-35B-A3B-FP8长任务中断恢复方案

OpenClaw断点续跑:千问3.5-35B-A3B-FP8长任务中断恢复方案 1. 当长任务遇上网络波动:我的深夜崩溃时刻 上周三凌晨2点,我正用OpenClaw对接千问3.5模型处理一批产品说明文档的自动化翻译任务。这个需要连续执行3小时的流程已经跑了80%&#…...

薄膜型声学超材料在汽车NVH中的应用:COMSOL仿真全流程解析

薄膜型声学超材料在汽车NVH优化中的COMSOL仿真实践 汽车NVH(噪声、振动与声振粗糙度)性能直接影响驾乘体验,而传统吸隔声材料在低频段往往表现不佳。薄膜型声学超材料通过局域共振机制打破了质量定律限制,为200-1000Hz频段的噪声…...

开发提效利器:基于快马平台构建可复用的mcp工具连接池

最近在开发AI应用时,经常需要连接各种外部服务,每次都要重复写一堆适配代码,特别浪费时间。后来发现用MCP协议统一管理这些连接可以大幅提升效率,于是在InsCode(快马)平台上搭建了一个可复用的MCP工具连接池模板,现在分…...

秒排 seo 对网站流量和转化率有什么影响_秒排 seo 会对网站造成哪些影响

秒排 seo 的概念及其对网站流量和转化率的影响 在当今数字营销的环境中,搜索引擎优化(SEO)被视为提升网站可见性和吸引流量的关键手段。其中,秒排 SEO(即快速上升到搜索引擎首页的SEO策略)备受关注。这种快…...

LaTeX公式插件:在PowerPoint中高效插入数学公式的终极指南

LaTeX公式插件:在PowerPoint中高效插入数学公式的终极指南 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 想在PowerPoint中轻松创建专业数学公式吗?latex-ppt插件让你直接在PPT中使…...

OpenClaw跨平台控制:千问3.5-35B-A3B-FP8任务手机端触发与查看

OpenClaw跨平台控制:千问3.5-35B-A3B-FP8任务手机端触发与查看 1. 为什么需要移动端控制OpenClaw? 上周五晚上十点半,我正躺在沙发上刷手机,突然想起有个重要的数据报表还没生成。如果按传统方式,我得爬起来开电脑、…...

索尼相机逆向工程终极实战:解锁隐藏功能的完整专业指南

索尼相机逆向工程终极实战:解锁隐藏功能的完整专业指南 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE Sony-PMCA-RE是一款基于逆向工程开发的专业工具,专门…...

本地化工具:跨语言界面适配的技术实践与解决方案

本地化工具:跨语言界面适配的技术实践与解决方案 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 在全球化软件开发中&#x…...

基于圣女司幼幽-造相Z-Turbo的实时交互应用开发:构建在线AI绘画工坊

基于圣女司幼幽-造相Z-Turbo的实时交互应用开发:构建在线AI绘画工坊 想象一下,你正在一个在线工具里创作一幅画。你输入“星空下的鲸鱼”,点击生成,然后…就是漫长的等待。你不知道它画到哪一步了,是卡住了&#xff0…...

WebLogic管理控制台超时配置实战:5个关键参数详解与优化建议(附12.2.1.4配置截图)

WebLogic管理控制台超时配置实战:5个关键参数详解与优化建议 每次登录WebLogic管理控制台时,你是否注意到那些隐藏在配置深处的超时参数?这些看似简单的数字背后,实则影响着系统性能、安全性和用户体验。作为一位长期与WebLogic打…...

5个高效技巧:掌握TurboWarp Packager将Scratch项目打包为跨平台应用

5个高效技巧:掌握TurboWarp Packager将Scratch项目打包为跨平台应用 【免费下载链接】packager Converts Scratch projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux. 项目地址: https://gitcode.com/gh_mirrors/pa…...

MAA助手:三步打造你的《明日方舟》自动化管家

MAA助手:三步打造你的《明日方舟》自动化管家 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.com…...

【变分自编码器】突破性优化:sd-vae-ft-mse重构图像生成质量的技术测评

【变分自编码器】突破性优化:sd-vae-ft-mse重构图像生成质量的技术测评 【免费下载链接】sd-vae-ft-mse 项目地址: https://ai.gitcode.com/hf_mirrors/stabilityai/sd-vae-ft-mse 在数字图像生成领域,如何在保持高效计算的同时突破细节还原瓶颈…...

告别IPA安装困境:App-Installer如何实现iOS应用部署革命

告别IPA安装困境:App-Installer如何实现iOS应用部署革命 【免费下载链接】App-Installer On-device IPA installer 项目地址: https://gitcode.com/gh_mirrors/ap/App-Installer 你是否曾遇到这样的情况:急需安装一个第三方iOS应用,却…...

L1与L2正则化:从稀疏解到平滑解的实战选择指南

1. 正则化:机器学习中的"防过拟合神器" 第一次听说正则化这个词时,我以为是某种数学上的正规操作。直到在实战项目中遇到模型在训练集上表现完美、测试集却一塌糊涂的情况,才真正理解它的价值。简单来说,正则化就是给模…...

QRemeshify:拓扑重构的智能解决方案——3D建模师的网格优化利器

QRemeshify:拓扑重构的智能解决方案——3D建模师的网格优化利器 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 在3D建模…...

5步打造沉浸式AI互动:SillyTavern高级角色聊天系统全指南

5步打造沉浸式AI互动:SillyTavern高级角色聊天系统全指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为一款面向高级用户的LLM前端界面,重新定义了…...

构建智能角色对话:探索SillyTavern的AI交互创新实践

构建智能角色对话:探索SillyTavern的AI交互创新实践 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 在AI技术快速发展的今天,如何让大型语言模型与人进行更有深度、…...

WindowResizer:打破窗口限制,自由掌控桌面布局

WindowResizer:打破窗口限制,自由掌控桌面布局 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过这样的困扰:某个应用程序的窗口大…...

S2-Pro嵌入式开发辅助:STM32项目代码生成与调试指南

S2-Pro嵌入式开发辅助:STM32项目代码生成与调试指南 1. 嵌入式开发的痛点与解决方案 对于嵌入式开发者来说,STM32系列MCU的开发工作往往伴随着大量重复性劳动。从外设初始化到驱动编写,再到调试过程中的问题排查,每一步都可能消…...

OpenClaw安全指南:Qwen3-14b_int4_awq模型下的权限控制与风险规避

OpenClaw安全指南:Qwen3-14b_int4_awq模型下的权限控制与风险规避 1. 为什么需要关注OpenClaw的安全问题 去年夏天,我在调试一个自动整理照片的OpenClaw任务时,差点酿成大错。当时AI助手误将"删除重复文件"理解成了"删除所有…...

3分钟快速上手:PvZ Toolkit终极游戏修改器使用完整指南

3分钟快速上手:PvZ Toolkit终极游戏修改器使用完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中阳光不足、金币不够而烦恼吗?PvZ Toolkit是一款…...

如何高效安全使用免Root框架:LSPatch Android模块注入完全指南

如何高效安全使用免Root框架:LSPatch Android模块注入完全指南 【免费下载链接】LSPatch LSPatch: A non-root Xposed framework extending from LSPosed 项目地址: https://gitcode.com/gh_mirrors/ls/LSPatch 在Android定制领域,免Root框架一直…...

FactoryBluePrints:模块化工厂自动化的全流程解决方案

FactoryBluePrints:模块化工厂自动化的全流程解决方案 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 副标题:解决戴森球计划玩家工厂设计难题的标准…...

PySceneDetect视频场景智能分析解决方案:从自动化检测到商业应用实战指南

PySceneDetect视频场景智能分析解决方案:从自动化检测到商业应用实战指南 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/gh_mirrors/py/PyScene…...

软件迭代中的系统兼容性演进:Rufus版本升级引发的技术适配思考

软件迭代中的系统兼容性演进:Rufus版本升级引发的技术适配思考 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 兼容性断层现象解析 当用户在老旧操作系统环境中运行新版软件时&#…...

光纤网络安全防御实战指南:从物理层威胁到智能防护体系

光纤网络安全防御实战指南:从物理层威胁到智能防护体系 【免费下载链接】PentestGPT Automated Penetration Testing Agentic Framework Powered by Large Language Models 项目地址: https://gitcode.com/GitHub_Trending/pe/PentestGPT 在数字化时代&#…...

AD 19安装后提示许可证已使用?手把手教你用Windows防火墙完美避坑

AD 19许可证冲突终极解决方案:Windows防火墙深度配置指南 当你满怀期待地安装完AD 19,正准备大展身手时,屏幕上突然跳出"your licence is already used on computer"的提示,这种挫败感我太熟悉了。作为一名经历过无数次…...