在使用cuda进行编程之前,我们不妨再来看看OpenCV中的效果是什么样子的,那么这一次,我将使用OpenCV来进行HOG+SVM的行人检测。
事实上,HOG+SVM在行人检测上的应用在网上已经有了非常丰富的资料,可以说,这个技术相对来说是比较成熟的,那么此次应用OpenCV进行行人检测的实现主要目的如下:
1.了解HOG+SVM在行人检测上的实际效果,并借此熟悉OpenCV中相关程序的编写
2.比较CPU与GPU的运行差别
3.引入我对HOG以及SVM的原理性学习
事实上,我们可以参考http://docs.opencv.org/2.4.9/modules/refman.html(即OpenCV的API档案)来学习OpenCV,并查找你需要的函数,了解各个参数的含义以及使用要求!这次我们调用的是OpenCV中关于gpu detect部分,于是我们可以参考如下:http://docs.opencv.org/2.4.9/modules/gpu/doc/object_detection.html
比如说detectMultiScale函数,如下图所示:
这里要注意padding要是(0,0)!
这里废话就不多说,直接上程序(这里只上gpu程序,普通的cv程序,大家应该都懂)
#include "stdio.h" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/gpu/gpu.hpp" #include "opencv2/ml/ml.hpp" #include "cuda.h" #include "cuda_runtime_api.h" using namespace std; using namespace cv; using namespace cv::gpu; int main(int argc, char** argv) { cudaSetDevice(0); cudaFree(0); size_t j = 0; int k = 0; int count = 0; int avrTime = 0; for (j = 0; j < 100; ++ j) { cout << count << endl; char img[100] = ""; sprintf(img, "./temp/image%d.jpg", count+1); cv::Mat image = cv::imread(img); if (image.empty()) { std::cout<<"read image failed"<<std::endl; } double start = (double)getTickCount(); gpu::GpuMat image_gpu(image); GpuMat gray_gpu; gpu::cvtColor(image_gpu, gray_gpu, COLOR_BGR2GRAY); //Mat gray; //cvtColor(image, gray, COLOR_BGR2GRAY); // 1. 定义HOG对象 cv::gpu::HOGDescriptor hog; // 采用默认参数 // 2. 设置SVM分类器 hog.setSVMDetector(cv::gpu::HOGDescriptor::getDefaultPeopleDetector()); // 采用已经训练好的行人检测分类器 // 3. 在测试图像上检测行人区域 std::vector<cv::Rect> regions; hog.detectMultiScale(gray_gpu, regions, 0, cv::Size(8,8), cv::Size(0,0), 1.05, 1); double t = ((double)getTickCount() - start)/getTickFrequency(); // 显示 for (size_t i = 0; i < regions.size(); i++) { cv::rectangle(image, regions[i], cv::Scalar(0,0,255), 2); } cout << "时间: " << t * 1000 <<"ms"<< endl; avrTime = avrTime + t * 1000; //char result[100] = ""; //sprintf(result, "./result/image%d.jpg", count+1); //imwrite(result, image); imshow("hog", image); waitKey(1); count ++; } cout << "time is : " << avrTime / 100 <<"ms"<< endl; return 0; }
这里为了方便了解算法运行的具体时间,我把测试图(100张)的运行平均时间计算出来,以此为准
可以发现,gpu的运行时间:
若我们把程序改成普通cpu运行(就是把gpu有关的改成普通的函数和mat),运行时间:
注意:上回书说道,第一次运行CUDA是慢的,这里我们把头两句话注释掉:
//cudaSetDevice(0);
//cudaFree(0);
结果如下:
第一次时间果真是要长很多,所以说,这两句话还是必要的,目的是第一次开启CUDA连接,第二次开始速度将变得更快。
这里我使用的训练样本是OpenCV自带的训练样本,HOG特征是其内部完成的,我使用的测试样本是100张连续的行人图片。已上传!
最后得到的结果
接下来,我将会进入到CUDA的学习
相关推荐
在本压缩包“OpenCV-MinGW-Build-OpenCV-4.5.2-x64.zip”中,提供的是一份已经针对MinGW编译器优化的OpenCV 4.5.2版本,适用于64位Windows系统。 OpenCV 4.5.2是该库的一个稳定版本,它包含了众多新特性和性能提升...
OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib
通过CUDA,开发者能够将计算任务分配给GPU,从而实现比传统CPU更快的速度,尤其是在处理大数据量的图像和视频时。 4. **计算机视觉基础**:书中会涵盖图像的基本操作,如图像读取、显示、转换、滤波、边缘检测等。...
这个压缩包"OpenCV-2.4.0-GPU-demos-pack"包含了针对GPU加速的OpenCV 2.4.0版本的演示程序,分别提供了32位(win32)和64位(win64)的Windows系统版本。 OpenCV 2.4.0是该库的一个重要里程碑,它在当时引入了许多...
这个压缩包"OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib-32bit.zip"是专为在Windows环境下使用MinGW编译器进行C++开发而准备的。MinGW(Minimalist GNU for Windows)是一个小型的GNU开发工具集,它提供了一个不...
OpenCV 4.9.0也可能包含了对新型硬件如GPU、多核CPU的更好利用,以实现更快的计算速度。 压缩包中的"opencv+opencv_contrib+4.8.0&4.9.0"文件可能包含了以下内容: 1. OpenCV 4.8.0和4.9.0的源代码,这允许用户...
1.android 版的opencv-4.5.5 sdk; 2.含有opencv-contrib-4.5.5 扩展模块; 3.可以在android studio 中加载,通过java 层调用,也可以添加so库+头文件的方式在jni 层调用; 4.适用于arm64-v8a架构,即64bit cpu。
Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only
赠送jar包:opencv-4.5.5-1.5.7.jar; 赠送原API文档:opencv-4.5.5-1.5.7-javadoc.jar; 赠送源代码:opencv-4.5.5-1.5.7-sources.jar; 赠送Maven依赖信息文件:opencv-4.5.5-1.5.7.pom; 包含翻译后的API文档:...
OpenCV-2.2.0-win32-vs2010.exe
【OpenCV-Python GPU资源利用】在Windows 10环境下,使用Visual Studio 2019和CMake来编译并安装OpenCV源码,同时启用GPU加速功能,需要进行一系列详细步骤。以下是对整个过程的详细说明: 首先,确保你的系统已经...
opencv-4.5.5-vc14_vc15.exe opencv_contrib-4.5.5.zip cmake-3.24.0-rc1-windows-x86_64.msi jdk-17_windows-x64_bin.msi VTK-8.2.0.zip
2、OpenCV-python支持CUDA,可以在GPU上运行,参考https://blog.csdn.net/REAL_liudebai/article/details/119356958 3、Python OpenCV配置CUDA以支持GPU加速 (不使用Visual Studio) 可以使用该OpenCV 库版本利用GPU...
opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15 win64版,opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15,支持版本:python3.4,3.5,3.6
赠送jar包:opencv-4.5.5-1.5.7.jar; 赠送原API文档:opencv-4.5.5-1.5.7-javadoc.jar; 赠送源代码:opencv-4.5.5-1.5.7-sources.jar; 赠送Maven依赖信息文件:opencv-4.5.5-1.5.7.pom; 包含翻译后的API文档:...
opencv-453的4.5.3版本,仓库 失败的可以下载,然后通过maven命令安装到本地仓库,直接应用即可. 1.安装命令: -Dfile具体maven安装路径 mvn install:install-file -Dfile=D:\software\Apache\apache-maven-3.6.2\other\...
opencv 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 ...
本文将重点讨论如何在Delphi集成环境中利用OpenCV进行开发,以及一个特别针对Delphi 2010到XE8优化的OpenCV组件——"Delphi-OpenCV-master"。 首先,"Delphi-OpenCV-master"是专为Delphi 2010至XE8版本设计的OpenCV...