windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2

1) 环境说明 

    操作系统: windows 10   IDE: vs 2017     编译工具: CMake  3.17.2

    原始数据:opencv 4.3.0 源码 + opencv 4.3.0 contrib + cuda 10.2

2) 原始资料准备:(默认安装 vs 2017)

    2.1 CMake 下载: https://cmake.org/download/  

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第1张图片

   按需下载,采用cmake-3.17.2-win64-x64.zip。

    2.2 opencv 4.3 以及 contrib 4.3

    opencv -- github  资源:   https://github.com/opencv/opencv/releases

    opencv -- contrib  资源:  https://github.com/opencv/opencv_contrib/releases

    2.3 cuda 10.2 

    cuda 资源: https://developer.nvidia.com/cuda-downloads

   按照的自己电脑配置进行选择: 我的配置是win10 + x64

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第2张图片

    2.4 tbb (一定要装,如果不装,cmake可以构建成功,但是vs构建opencv工程时,会报错。说是安装,下载资源解压到指定目录即可)【目录结构可见下方】

    tbb 资源: https://github.com/oneapi-src/oneTBB/releases

3)顺序安装:

     3.1) 默认已安装好 vs 2017

     3.2) 安装下载好的 cuda 10.2 (cuda 是仅支持NVIDIADIA 显卡)  :

            参考 :https://www.cnblogs.com/arxive/p/11198420.html

            自动添加cuda路径到计算机系统路径:

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第3张图片

     3.3) cmake  3.17.2  最重要的勾选下列选项 --

            参考:https://blog.csdn.net/u011231598/article/details/80338941

     3.4 )  上述工作准备完毕  --  最重要部分: opencv + opencv_contrib + cuda 编译

           3.4.1  准备存储文件夹,为了方便构建,我放在E盘下的opencv4.3文件下,目录结构如下所示:(路径避免中文字符,可以减少很多不必要的麻烦):

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第4张图片

        3.4.2  cmake 打开

        source code 选择我们设置的opencv 源码路径 -- where to build the binaries 路径是我们需要构建工程的输出目录,这边我在同级目录下直接构建opencv-4.3.0-build文件夹,作为我工程的输出目录。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第5张图片

         这时 我们点击 左下方的 Configure 按钮,如果你没有预先构建build目录,会询问是否构建目录,选择是即可;接下来会显示选择编译器: 根据自己的本机 c++ IDE选择,我这边选择 2017版本。

        在Optional platform for generator, 我们选择x64; (因为cuda 版本我选择了x64位,否则在后续编译时,会出现contrib 模块无法连接到 target module 下的cuda文件错误。我在这里耽误了一些时间,最后在stackflow上找到原因,请选择 x64)

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第6张图片

    点击finish 按钮,cmake 开始更新选项。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第7张图片

     完成后,会出现如下很多的选项,接下来按需要选择 我们所需要的选项。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第8张图片

从上往下,选择勾选 BUILD_EXAMPLES、取消勾选BUILD_PREF_TESTS和BUILD_TESTS、(如果需要将所有的模块打包成一个模块,勾选BUILD_opencv_world, 这边建议勾选,使用时只加载一个lib即可)、设置OPENCV_EXTRA_MODULES_PATH,选择我们防止opencv_contrib源码位置的modules文件。如下图:

  再次点击configure 看下面输出有没有报错: 这边一般会出现两种情况:

1)windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第9张图片这11个文件下载报错。E:\opencv-4.3\opencv-4.3.0-build\CMakeFiles查看CMakeError.log 或者 build下的CMakeDownloadLog.txt查看网址,直接到github上下载放在E:\opencv-4.3\opencv-4.3.0\.cache\xfeatures2d下的对应目录下,你会发现文件夹下有对应文件,但是文件夹为0KB,你需要将自己下载的文件 重命名 覆盖文件。(命名按照0KB文件同名命名覆盖)【其他相同文件缺失也可按照此方法进行对应版本文件替换,CSDN也有资源文件,就是需要币】

2) 这个face模块下文件较大,日常下载失败,人脸模块我也用不到,故我选择不勾选该模块。

3)通过筛选,tbb,勾选 WITH_TBB,点击 configure ,设置Tbb的环境路径。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第10张图片

设置tbb环境路径:点击 configure 即可。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第11张图片

cuda 勾选, 点击 configure

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第12张图片

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第13张图片

可以 https://developer.nvidia.com/cuda-gpus 查看自己GPU的CUDA_ARCH_BIN 参数减少configure时间。我的是1050 ,填写 6.1 即可。

最后点击Generate生成项目,没有错误,通过Open Project 使用VS 2017 打开构建build下的OpenCV.sln项目。

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第14张图片

生成ALL_BUILD 和 INSTALL 项目 -- 右键生成。大约 2-3小时后生成项目(with CUDA的编译特别慢)

一切顺利没有报错,可以在build的路径下找到你生成的lib文件,即可配置使用了。(有错误可以查找对应错误,重新生成)

windows 10 + vs2017 +cmake 3.17.2 编译 opencv 4.3.0 +opencv_contrib + cuda 10.2_第15张图片 

 

   4) 项目测试

     需要配置一下 系统环境变量:Path (项目运行时所需要的dll文件)

   CMakeLists.txt

cmake_minimum_required (VERSION 3.0)

project (ReconStruct)

set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)

#OpenCV include
set(OpenCV_INCLUDE_DIR E:/opencv-4.3/opencv-4.3.0-build/install/include)

#Eigen include
set(EIGEN_INCLUDE_DIR "E:/opencv-4.3/eigen-3.3.7/")

#CUDA  include
set(CUDA_INCLUDE_DIR "E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2/include")

include_directories(
	${PROJECT_INCLUDE_DIR}
	${OpenCV_INCLUDE_DIR}
	${EIGEN_INCLUDE_DIR}
	${CUDA_INCLUDE_DIR}
)
message("source foleder is : ${OpenCV_INCLUDE_DIR}")

#openCV lib
set(OpenCV_LinkLib_DIR E:/opencv-4.3/opencv-4.3.0-build/install/x64/vc15/lib)

#CUDA lib (使用""包含空格path)
set(CUDA_LinkLib_DIR "E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2/lib/x64")

link_directories(
	${OpenCV_LinkLib_DIR}
	${CUDA_LinkLib_DIR}
)
# opencv 的依赖库
link_libraries(opencv_world430 opencv_world430d cublas cuda cudadevrt cudart cudart_static OpenCL)
add_executable(ReconStruct src/main.cpp)

target_link_libraries(ReconStruct ${OpenCV_LinkLib_DIR})

   主函数: main.cpp

#include 
#include 
#include 
#include 
#include 
#include "cuda_runtime.h"
#include 

using namespace std;
using namespace cv;

int main()
{
	clock_t t1 = clock();
	
	Mat src_host = imread("E:/hello.png");
	imshow("src", src_host);
	cuda::GpuMat src, gray;
	cv::imshow("src", src_host);
	src.upload(src_host);
	cuda::cvtColor(src, gray, COLOR_BGR2GRAY);
	Mat gray_host;
	gray.download(gray_host);
	imshow("src", src_host);
	imshow("gray", gray_host);
	
	clock_t t2 = clock();
	std::cout << "time :" << (t2 - t1) / 1000 << "s" << endl;

	/*cv::cuda::printCudaDeviceInfo(cuda::getDevice());
	int count = cuda::getCudaEnabledDeviceCount();
	printf("GPU Device Count : %d \n", count);*/

	waitKey(0);
	return 0;
}

使用GPU进行图片颜色转灰度。

至此,opencv + cuda 环境配置完成。

感谢相关博客主:

https://blog.csdn.net/qq_37791134/article/details/80739395

https://www.cnblogs.com/asmer-stone/p/5530868.html

https://blog.csdn.net/qq_41180014/article/details/91467890

你可能感兴趣的:(opencv+cuda,项目部署,opencv,cmake,cuda)