`

闵大荒之旅(三)---- 抄抄改改opencv之GPUvsCPU

 
阅读更多

 在使用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的学习
 
 

  • 大小: 20.4 KB
  • 大小: 4.6 KB
  • 大小: 5 KB
  • 大小: 23.3 KB
  • 大小: 77.7 KB
  • 大小: 76.8 KB
  • 大小: 68.3 KB
  • 大小: 2.3 MB
分享到:
评论

相关推荐

    OpenCV-MinGW-Build-OpenCV-4.5.2-x64.zip

    在本压缩包“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.zip

    OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib

    Hands-On-GPU-Accelerated-Computer-Vision-with-OpenCV-and-CUDA-master.zip

    通过CUDA,开发者能够将计算任务分配给GPU,从而实现比传统CPU更快的速度,尤其是在处理大数据量的图像和视频时。 4. **计算机视觉基础**:书中会涵盖图像的基本操作,如图像读取、显示、转换、滤波、边缘检测等。...

    OpenCV-2.4.0-GPU-demos-pack

    这个压缩包"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

    这个压缩包"OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib-32bit.zip"是专为在Windows环境下使用MinGW编译器进行C++开发而准备的。MinGW(Minimalist GNU for Windows)是一个小型的GNU开发工具集,它提供了一个不...

    opencv4.8.0-opencv4.9.0-opencv-contrib4.8.0-opencv-contrib4.9.0

    OpenCV 4.9.0也可能包含了对新型硬件如GPU、多核CPU的更好利用,以实现更快的计算速度。 压缩包中的"opencv+opencv_contrib+4.8.0&4.9.0"文件可能包含了以下内容: 1. OpenCV 4.8.0和4.9.0的源代码,这允许用户...

    android-sdk-opencv-4.5.5&opencv-contrib-4.5.5-arm64-v8a

    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-OpenCV-Class-main

    Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only

    opencv-4.5.5-1.5.7-API文档-中文版.zip

    赠送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-2.2.0-win32-vs2010.exe

    opencv-python使用GPU资源--虚拟环境安装与编译opencv源码(csdn)————程序.pdf

    【OpenCV-Python GPU资源利用】在Windows 10环境下,使用Visual Studio 2019和CMake来编译并安装OpenCV源码,同时启用GPU加速功能,需要进行一系列详细步骤。以下是对整个过程的详细说明: 首先,确保你的系统已经...

    opencv-4.5.5-opencv-contrib-4.5.5-以及其他OpenCV配置需要的包

    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

    支持GPU的OpenCV-python代码

    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 win64版,opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15,支持版本:python3.4,3.5,3.6

    opencv-4.5.5-1.5.7-API文档-中英对照版.zip

    赠送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.jar

    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 安装包 opencv-4.1.2-vc14_vc15 opencv 安装包 ...

    Delphi-OpenCV-master delphi2010-XE8可用的OpenCV组件

    本文将重点讨论如何在Delphi集成环境中利用OpenCV进行开发,以及一个特别针对Delphi 2010到XE8优化的OpenCV组件——"Delphi-OpenCV-master"。 首先,"Delphi-OpenCV-master"是专为Delphi 2010至XE8版本设计的OpenCV...

Global site tag (gtag.js) - Google Analytics