OpenCV开发笔记(十二):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-msvc2015编译(opencv3.4.0、cuda9.0、VS2015)
标签: OpenCV+GPU编译 CUDA加速 VS2015 Qt Opencv GPU加速
若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102793581
目录
OpenCV编译支持Gpu(window qt msvc2015)
步骤一:CMake配置,错误“error in configuration process, project……”IDE版本问题
步骤二:CMake配置,错误“error in configuration process, project…”环境变量问题
步骤三:CMake配置,“MBuild.exe”的问题,需要装C++的通用开发环境和windows sdk。
步骤六:配置报错,通过“SSL connect error”,警告不处理了,直接配置
OpenCV开发专栏
《OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境》
《OpenCV开发笔记(三):OpenCV图像的概念和基本操作》
《OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储》
《OpenCV开发笔记(五):OpenCV读取与操作摄像头》
《OpenCV开发笔记(六):OpenCV基础数据结构、颜色转换函数和颜色空间》
《OpenCV开发笔记(八):OpenCV常用操作之计时、缩放、旋转、镜像》
《OpenCV开发笔记(九):OpenCV区域图像(ROI)和整体、局部图像混合》
《OpenCV开发笔记(十):OpenCV图像颜色通道分离和图像颜色多通道混合》
《OpenCV开发笔记(十一):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-mingw32编译》
《OpenCV开发笔记(十二):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-msvc2015编译(opencv3.4.0、cuda9.0、VS2015)》
持续补充中…
OpenCV开发笔记(十二):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-msvc2015编译(opencv3.4.0、cuda9.0、VS2015)
前言
接上一篇章,使用cuda开发,cuda不支持windows下的mingw开发,所以转为msvc2015 32。
背景
上一篇《OpenCV开发笔记(十一):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-mingw32编译》,cuda无法在windows平台上不支持mingw32。
关于OpenCL硬件加速与Cuda
OpenCL
由苹果(Apple)公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。
CUDA
CUDA是一个基于Nvidia GPU的并行计算的架构。CUDA最主要的包含两个方面:一个是ISA指令集架构;第二硬件计算引擎;实际上是硬件和指令集。 也就是说我们可以把CUDA看做是与X86或者cell类似的架构,但是是基于是GPU,而不是传统的CPU。

OpenCL与CUDA区别
Cuda和OpenCL的关系并不是冲突关系,而是包容关系。
OpenCL是一个API,在第一个级别,CUDA架构是更高一个级别,在这个架构上不管是OpenCL还是DX11这样的API,还是像C语言、Fortran、DX11计算,都可以支持。作为程序开发员来讲,一般他们只懂这些语言或者API,可以采用多种语言开发自己的程序,不管他选择什么语言,只要是希望调用GPU的计算能,在这个架构上都可以用CUDA来编程。
关于OpenCL与CUDA之间的技术区别,主要体现在实现方法上。基于C语言的CUDA被包装成一种容易编写的代码,因此即使是不熟悉芯片构造的科研人员,也可能利用Cuda工具编写出实用的程序。而OpenCL虽然句法上与CUDA接近,但是它更加强调底层操作,因此难度较高,但正因为如此,OpenCL才能跨平台运行。
CUDA是一个并行计算的架构,包含有一个指令集架构和相应的硬件引擎。OpenCL是一个并行计算的应用程序编程接口(API),在NVIDIA CUDA架构上OpenCL是除了C for CUDA外新增的一个CUDA程序开发途径。
如果你想获得更多的对硬件上的控制权的话,你可以使用OpenCL这个API来进行编程,如果对API不是太了解,也可以用CUDA C语言来编程,这是两种不同编程的方式,他们有他们相同点和不同点
OpenCL和CUDA C语言进行开发的时候,在并行计算这块,他们的概念是差不多的,这两种程序在程序上是有很大的相似度,所以程序之间的相互移植相对来说也是比较容易。
CUDA C是一种高级语言,那些对硬件了解不多的非专业人士也能轻松上手;而OpenCL则是针对硬件的应用程序开发接口,它能给程序员更多对硬件的控制权,相应的上手及开发会比较难一些。

OpenCV编译支持Gpu(window qt msvc2015)
步骤一:CMake配置,错误“error in configuration process, project……”IDE版本问题

以上错误是没找到编译器,简单来说就是,重载安装VS2017的相关部分(添加MSVC2015的编译C++环境)

然后继续,发现VS2017和MSVC2015虽然都装了,但是CMake得和VS编译器配对,经过每一个都测试,只能选择如下,才可以不报上述错误
解决如下图(未装MSVC2015之前不行也没有再深究了),选择32位和64位又都可以编译通过了,推论应该主要是要安装下面这个:

配置32位的,如下图:


步骤二:CMake配置,错误“error in configuration process, project…”环境变量问题


查看错误文件“CMakeError.log”,如下图:

需要设置的环境变量,查看报错的环境变量:
CUDA_cublas_LIBRARY (ADVANCED)
CUDA_cufft_LIBRARY (ADVANCED)
CUDA_nppc_LIBRARY (ADVANCED)
CUDA_nppial_LIBRARY (ADVANCED)
CUDA_nppicom_LIBRARY (ADVANCED)
CUDA_nppidei_LIBRARY (ADVANCED)
CUDA_nppif_LIBRARY (ADVANCED)
CUDA_nppig_LIBRARY (ADVANCED)
CUDA_nppim_LIBRARY (ADVANCED)
CUDA_nppist_LIBRARY (ADVANCED)
CUDA_nppisu_LIBRARY (ADVANCED)
CUDA_nppitc_LIBRARY (ADVANCED)
CUDA_npps_LIBRARY (ADVANCED)
必须要设置,否则无法生成工程文件。

查看是否有这些库,如下图:

只有64位的才有,那就配置为VS2017 X64的,32位的就压根没有了,所以改为vs2017 x64的,如下图:


应该是检测到,默认就勾选上了,安装目录修改下,编译完成后好拿库。

步骤三:生成工程

生成成功,如下图:

步骤四:使用VS2017编译
打开VS2017打开上述build目录的vs的all工程,打开后如下图:

改目标为release x64编译工程,生成解决方案,漫长的等待。

根据经验,编译是编译所有的dll和例子,很多时候例子是会有错误的(需要调整环境变量,库的安装路径等等),所以这时候一个小技巧,退而求其次,单独编译opencv库就行了,试一试如下图:

分别如下图:

Opencv还是错误,经判断应该是CMake使用版本问题,查询如下图:

所以要查询下显卡支持的cuda的计算能力,网址:
https://developer.nvidia.com/cuda-gpus
查询显卡计算能力,可以通过运行cuda samples中的deviceQuery得知。

命令行运行结果如下图:

修改CMake配置:

重新configure和generate一次,还是不行,各种查找,继续修改


后经过多次其他方法尝试,不在列举,都无法解决,基本上能尝试的方法都尝试了,遂决定降低cuda sdk的版本
步骤五:更换SDK版本(10.1--->9.0)
下载旧版本的地址:https://docs.nvidia.com/cuda/

这边下载,那边卸载已安装的,完成后继续CMake,VS走一遭

还是错误

降低VS版本至VS2015。
重装系统重新开始OpenCV编译
步骤一:安装VS2015社区版本
步骤二:安装cuda9.0

步骤三:CMake配置,“MBuild.exe”的问题,需要装C++的通用开发环境和windows sdk。

使用VS的安装工具,VS2015没有installer需要自己点开安装程序,自定义添加安装,安装完成后,配置通过,如下图:
步骤四:CMake配置,找不到一些dll的路径
查看本篇章OpenCV编译上重装系统前的步骤二,是配置编译环境要是64位的/
步骤五:添加opencv_contrib3.4.0

步骤六:配置报错,通过“SSL connect error”,警告不处理了,直接配置

步骤七:打开工程编译,成功编译opencv_core

步骤八:生成debug和release

此时会出现错误,重定义什么的,其实是test报错,非modules的库报错,最终在执行一次modules确认,如下图:

(release整个工程编译大概2个多小时,网上有4个多小时的)。
库编译成功,进行部署,然后拿取头文件和库文件,如下图:


步骤九:测试运行成功(参照模块化)
测试代码
bool OpenCVGpuManager::testOpenCVGpu()
{
bool ret = false;
// 返回已安装的启用CUDA的设备数
int deviceCount = cv::cuda::getCudaEnabledDeviceCount();
if(deviceCount)
{
ret = true;
}
qDebug() << __FILE__ << __LINE__
<<"The localMachine cuda‘s device count :" << deviceCount;
return ret;
}
测试结果

Qt模块化(OpenCVGpuManager)
部署环境
涉及到gpu跟cuda、qt、编译环境息息相关,如下:
- 显卡:NVIDIA GeForce GTX 750
- Cuda版本:9.0
- VS版本:2015
- Qt版本:5.9.3 msvc2015 x86_win64
模块化部署

openCVGpuManager.pri
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
$$PWD/OpenCVGpuManager.h
SOURCES += \
$$PWD/OpenCVGpuManager.cpp
#must be msvc2015 64 (only for this platform
INCLUDEPATH += $${PWD}/openCVGpu3.4.0/include \
$${PWD}/openCVGpu3.4.0/include/opencv \
$${PWD}/openCVGpu3.4.0/include/opencv2
LIBS += -L$${PWD}/openCVGpu3.4.0/x64/vc14/lib
LIBS += -lopencv_aruco340
LIBS += -lopencv_bgsegm340
LIBS += -lopencv_bioinspired340
LIBS += -lopencv_calib3d340
LIBS += -lopencv_ccalib340
LIBS += -lopencv_core340
LIBS += -lopencv_cudaarithm340
LIBS += -lopencv_cudabgsegm340
LIBS += -lopencv_cudacodec340
LIBS += -lopencv_cudafeatures2d340
LIBS += -lopencv_cudafilters340
LIBS += -lopencv_cudaimgproc340
LIBS += -lopencv_cudalegacy340
LIBS += -lopencv_cudaobjdetect340
LIBS += -lopencv_cudaoptflow340
LIBS += -lopencv_cudastereo340
LIBS += -lopencv_cudawarping340
LIBS += -lopencv_cudev340
LIBS += -lopencv_datasets340
LIBS += -lopencv_dnn340
LIBS += -lopencv_dpm340
LIBS += -lopencv_face340
LIBS += -lopencv_features2d340
LIBS += -lopencv_flann340
LIBS += -lopencv_fuzzy340
LIBS += -lopencv_highgui340
LIBS += -lopencv_img_hash340
LIBS += -lopencv_imgcodecs340
LIBS += -lopencv_imgproc340
LIBS += -lopencv_line_descriptor340
LIBS += -lopencv_ml340
LIBS += -lopencv_objdetect340
LIBS += -lopencv_optflow340
LIBS += -lopencv_phase_unwrapping340
LIBS += -lopencv_photo340
LIBS += -lopencv_plot340
LIBS += -lopencv_reg340
LIBS += -lopencv_rgbd340
LIBS += -lopencv_saliency340
LIBS += -lopencv_shape340
LIBS += -lopencv_stereo340
LIBS += -lopencv_stitching340
LIBS += -lopencv_structured_light340
LIBS += -lopencv_superres340
LIBS += -lopencv_surface_matching340
LIBS += -lopencv_text340
LIBS += -lopencv_tracking340
LIBS += -lopencv_video340
LIBS += -lopencv_videoio340
LIBS += -lopencv_videostab340
LIBS += -lopencv_xfeatures2d340
LIBS += -lopencv_ximgproc340
LIBS += -lopencv_xobjdetect340
LIBS += -lopencv_xphoto340
win32{
# copy openCVGpu3.4.0 release dll
src_file = $$PWD/openCVGpu3.4.0/x64/vc14/bin/*
dst_file = $$OUT_PWD
src_file ~= s,/,\\,g
dst_file ~= s,/,\\,g
system(xcopy $$src_file $$dst_file /y /s/q/e)
}
工程模板OpenCVGpuDemo:对应版本号v1.0.0
OpenCVGpu对应版本号v1.0.0
若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102793581
智能推荐
VS2015 C++ OpenCV开发环境配置
操作系统:win10 开发工具:VS2015 版本:Opencv 3.4.0 OpenCV 3.4.0环境变量配置 此电脑->属性->高级系统设置->环境变量 C:\opencv_3.4.0\build\x64\vc14\bin 建立Win32控制台项目 打开VS2015,文件->新建->项目->Visual C++新建Win32控制台项目 输入名称,比如hel...
OpenCV和VS2015开发环境配置
首先先安装好VS2015(废话),再下载并安装好OpenCV(要记住安装的路径),之后打开VS2015,新建一个工程和main.cpp文档,如图: 之后点击项目->xxx属性(这里是OpenCVCreateTest属性),打开项目属性,如图: 在这里,总共有2个地方需要添加路径,分别是(这里路径以我的OpenCV安装路径为例): ·VC++目录->包含目录:D:\Open...
Windows 下 OpenCV 3.4.0 + Contrib 部署文档 (VS2015 & Android)
声明 以下[参考]链接,如有侵权,请联系删除,在此先感谢在网络上无私奉献的人们~ 如有错误,请联系更正,GitHub同文地址 文章目录 声明 VS 篇 编译 OpenCV + OpenCV_Contrib (+ Qt) + VS2015 1. 编译环境准备 2. 编译配置 3. 执行编译 Visual Studio 项目使用 OpenCV 1. 创建新项目 2. 在 VS 中配置 OpenCV 3...
VS2015编译OpenSSL
概述 OpenSSL 是一个开源的第三方库,它实现了 SSL(Secure SocketLayer)和 TLS(Transport Layer Security)协议,被广泛企业应用所采用。对于一般的开发人员而言,在 Win32 OpenSSL 上下载已经编译好的 OpenSSL 库是省力省事的好办法。对于高级的开发用户,可能需要适当的修改或者裁剪 OpenSSL,那么编译它就成为了一个关键问题。...
VS2015编译jsoncpp
jsoncpp下载地址:https://github.com/open-source-parsers/jsoncpp/releases 版本:jsoncpp-1.9.1 下载jsoncpp源码,使用cmake-gui可以直接生成工程,然后直接编译就可以了 我使用VS2015编译好的jsoncpp x86和x64 静态库地址:https://gitee.com/chenjk10/json...
猜你喜欢
VS2015编译IfcOpenShell
简介 ifcopenshell是一个解析ifc结构和几何表达的开源库,我还在写如何编译它那么显然我自己还没有用过… 之前已经编译过几次和ifc相关的库,所以这次已经没那么虚了。好在这个开源库十分活跃,看来用过的人也不少,所以编译和安装的过程都相对比较简单哦! 准备 你需要提前安装 - visual studio 2015(当然其他你喜欢的版本也可以) - git, 并设置环境变量 -...
linux上安装Qt4.8.6+QtCreator4.0.3
一、Qt简介 Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。 准备工作 操作系统:centos6.5 位数:64位 二、安装 1、获取源码Qt4.8.6 2、获取源码QtCreator4.0.3 2、安装QtCreator4.0.3 进入QtCreator安装界面,指定...
react-native metro 分析
文章目录 前言 概念 Resolution Transformation Serialization 打包方式 Moudles Plain bundle Indexed RAM bundle File RAM bundle 流程 前置流程 resolve流程 Transformer流程 序列化流程 缓存 为什么要缓存 缓存的请求与缓存 Metro配置 结构 前言 metro是一种支持ReactNa...
嵌入式Linux——应用调试:用户态打印段错误信息
简介: 很多时候我们会遇到段错误:segmentation fault,而段错误有时是由内核引起的,有时是由应用程序引起的。在内核态时,发生段错误时会打印oops信息,但是在用户态时,发生段错误却只会打印segmentation fault而并不会打印其他的信息。所以本文主要介绍在用户态时,通过修改内核设置和添加启动参数来打印引发segmentati...
springboot1.4.1整合logback 遇到的问题
springboot1.4.1整合logback 遇到的问题 项目使用了springboot1.4.1整合logback,然而设置的过期时间15 并没有生效, 2GB达到2G自动删除也没有生效,仅仅实现了按大小分割。 经过查看pom 父工程内的源码发现是默认的logback版本是1.1.7,而过期时间配置是在logback 1.1.8以后才支持的。 不得不说这是springboot1.4.1 的b...
