OpenCV 3.2.0 +Win10+ CUDA 8.0+ VS2013 编译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 3.2.0 +Win10+ CUDA 8.0+ VS2013 编译相关的知识,希望对你有一定的参考价值。

OpenCV发布时并不包含GPU模块,若要使用GPU加速的OpenCV代码需要重新编译OpenCV。一个英文版本的教程

环境和资源准备

计算机必须有支持CUDA 的NVIDIA GPU,并且装好了驱动程序。

安装CUDA toolkit,本文使用的是CUDA8.0。下载地址

下载OpenCV 3.2 选择的win pack版本,解压到指定文件目录下。下载地址

下载安装CMake。版本使用的是cmake-3.10.1-win64-x64.msi。下载地址

opencv-contirb-3.2.0下载,下载的是3.2.0的zip,解压到指定的目录下。opencv-contirb是opencv的扩展包。下载地址

Eigen下载,下载最近的稳定版本即可,这里使用的是eigen-3.3.3,解压到指定目录下。Eigen是用来库优化矩阵的计算的。下载地址

tbb下载,tbb2017_20161004oss_win.zip,解压到指定目录下。Intel TBB是用来优化OpenCV库函数的多核计算性能的。下载地址

使用CMAKE进行工程配置

打开CMAKE,输入OpenCV的sources路径,以及将要编译的结果路径(自主创建一个文件夹),勾选择Grouped选项。

技术分享图片

选择编译器:选择Studio 2013 Win64。编译过程中,会下载第三方依赖库ffmpeg以及ippicv。网速不佳情况下的解决办法

技术分享图片

BUIlD栏配置

展开BILD选项,取消BUILD_DOCS( 若选择还需要其它的依赖)。

CUDA栏配置

展开CUDA选项,CUDA_TOOLKIT_ROOT_DIR应该是CUDA8.0安装的文件目录,如果在你的电脑上安装了多个版本的CUDA,请将该路径修改到CUDA8.0的文件目录下。

CUDA_ARCH_BIN选项能够编译从计算能力2.0-6.1的所有架构的代码,这个可以根据自己的实际情况进行修改,如果不加修改的话,在i7处理器上编译的时间大约是3.5个小时,但是编译之后的代码就可以在任何机器上部署了。

选中CUDA_FAST_MATH选项,将会加速某些数学计算。配置如下:

技术分享图片

WITH栏配置

WITH_CUDA,WITH_FFT应该是默认选中的。

选中WITH_CUBLAS,从而可以使用cuBLAS。

选中WITH_EIGN,WITH_TBB

点击Configure,添加目录

OPENCV_EXTRRA_MODULES_PATH: ~/opencv_contrib-3.2.0/modules

EIGEN_INCLUDE_PATH:~/ eigen-eigen-5a0156e40feb

TBB_ENV_iNCLUDE: ~/tbb2017_20161004oss/include

TBB_ENV_LIB: ~/Library/tbb2017_20161004oss/lib/intel64/vc14/tbb.lib

TBB_ENV_LIB_DEBUG: ~/Library/tbb2017_20161004oss/lib/intel64/vc14/tbb_debug.lib

TBB_VER_FILE: ~/Library/tbb2017_20161004oss/include/tbb/tbb_stddef.h

注意已上的“~”都要落实到自己的文件目录下,根据解压的位置选择。

点击Configure,直到没有红色的警告出现为止。

点击Generate,若成功结果类似如下:

技术分享图片

点击Open Project,打开VS工程:

技术分享图片 

VS编译 

在VS中点击Solution Explorer,注意将平台选择,我选择的是X64、RELEASE环境,此处根据自己的实际需求来。

因为OpenCv3.1.0在工程中搜索graphcuts.cpp,并打开,

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

修改为:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

选中CMakeTargets,右键ZERO_CHECK,单独编译一下此工程,看能否成功。如果编译成功,则进行下一步。

右键INSTALL选择build,这一步不仅重新编译而且还将产生的文件拷贝到install目录下。

安静的等待编译结束吧……

测试

新建一个空的控制台程序,配置include路径,配置lib路径,注意在这里都要选择刚编译完的新的路径。

在Linker->Input 中需要导入新编译好的lib,小窍门是找到刚刚生成lib的文件夹,按住shift+右键,选择在此处打开命令行窗口,输入 

 dir /b > release.txt

 然后,粘贴复制吧。

我没有设置环境变量,因此需要继续在属性中Debugging->Environment中添加在PATH=~/bin 这里的bin目录应该根据自己的实际情况填写,是刚刚生成的二进制文件的目录。

新建一个cpp添加代码:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>


using namespace std;
using namespace cv;


int main(int argc, char* argv[])
{
    try
    {
        cv::Mat src_host = cv::imread("face.jpg", CV_LOAD_IMAGE_GRAYSCALE);  //这里使用自己的测试图片
        cv::cuda::GpuMat dst, src;
        src.upload(src_host);        
        cv::cuda::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
        
        cv::Mat result_host;
        dst.download(result_host);

        cv::imshow("Result", result_host);
        cv::waitKey();
    }
    catch (const cv::Exception& ex)
    {
        std::cout << "Error: " << ex.what() << std::endl;
    }

    std::cin.get();

    return 0;
}

成功运行的话,恭喜你! 

以上是关于OpenCV 3.2.0 +Win10+ CUDA 8.0+ VS2013 编译的主要内容,如果未能解决你的问题,请参考以下文章

在win10下实现openCV3.2.0+vs2015+cmake出错解决方案

opencv 3.2安装

Python3一些包的下载

CMake编译OpenCV

C++跨平台库QT学习10 OpenCV开发环境搭建

C++跨平台库QT学习10 OpenCV开发环境搭建