Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013
折腾了三天终于配置成功了,在此写下编译配置的全部步骤和遇到的很多坑。
整体介绍:
OpenCV 中 CUDA 实现的函数还不是太多,使用前要在OpenCV的官网上确认以下你想要的功能是否已经实现,否则费了老鼻子劲配个环境不能用,太浪费时间了。
编译的时候要编译Release 和Debug 两个版本,我的电脑 i5-4460 3.20GHz ,每个版本大概需要两个半小时左右,电脑配置不一样时间也会有些不同。编译完成之后整个文件夹19.7G(MD,这么大,吓死宝宝了~)。
环境:
Windows10 专业版 64位
Virtual Stadio 2013
Opencv 3.1
Cuda 7.5
Cmake 3.4.3
安装步骤:
0、安装前准备的内容:
安装TBB:
自行去官网下载,下载后的文件,解压放在C:\Program Files(可以放在任意目录,是后边环境变量设置的时候对应调整一下即可),目录下:
然后设置环境变量:在系统-> 高级系统设置->环境变量->path 后边加入下边地址:
C:\Program Files\tbb44_20160413oss\bin\intel64\vc12 (这里注意选择对应的32位 或者64 位和对应的VS版本,Virtual Studio2010 对应vc10, Virtual Studio 2011 对应vc11, Virtual Studio 2013 对应 vc12. Virtual Studio 2015 对应 vc14).
安装CUDA:
自行去官网下载,然后按照默认的安装就行,路径最好不要动,省得配置的时候再有麻烦。
(开始编译之前之前建议先阅读一下写在后边的我编译过程中遇到的几个大坑的问题,可能会让你少走很多弯路)
1、新建一个文件夹,并把下好的Openv3.1 和 contrib 的源码都放进去(源码在github上自行下载,地址在opencv.org上找)。
2、打开Cmake(自行下载,一定要用3.4.3的,不要用最新的),设置源码路径和目标路径(我的目标路径是:D:\opencv310_CUDA),点击Configure。
PS:第一次Configure的时候由于需要下载一些文件,可能时间会久一点。
这时会让你选择环境,对应选择就可以。我的是VS 2013,所以选了上边的配置。然后点击 Finish。
说明:Cmake中红色的部分说明还没有更新,需要点击Configure更新,每次更改完一些配置或者参数之后都要点击Configure更新一下。最后确定配置无误了再点Generate,将会在你的目标文件夹中生成项目文件。
3、这里Cmake里边需要先配置点东西:
把下边的
WITH_TBB
WITH_CUDA
都勾选上,其他的项可以暂时不管。
PS:这里边有一个BUILD_opencv_world的选项,网上有人建议不要选,我就没有选,说是会出问题的几率比较大,而且选了这个选项之后,所有的文件都会被编译到一个dll里边去,大家还记得,在OpenCV官网上下的直接可以在Windows上可以用的OpenCV么,那个里边就是一个opencv_world310.dll,把所有的类、函数什么的都放到这个里边去了,这样的坏处就是,很多你的程序中用不上的东西也都给你放进去了。
然后点Configure
这时,会让你选择TBB的路径,对应填写好就行,我的是:C:\Program Files\tbb44_20160413oss\include
然后再次Configure, 如下图:
这次又会有关于TBB的两个红色的,这个是Cmake已经自己找到的路径,你看一眼,没什么问题就再一次Configure。
这次就不会有红色的了,确认一下没什么需要再配置的了,就直接Generate。
等着Generate完成,你就可以去目标文件夹去看生成的结果了。
4、在你的目标文件中找到OpenCV.sln 文件,并用VS打开:
我的目标文件夹是D:opencv310_CUDA
5、打开之后,大概长这样
然后在,CMakeTargets下的INSTALL上右键->生成。(生成之前建议先阅读一下写在后边的我编过程中遇到的几个大坑的问题,可能会让你少走很多弯路)
然后就慢慢的等待吧,等着编译完成就OK了。
6、编译完成之后,你会在你的目标文件夹中找到一个install文件夹,里边就有Debug和Release的各种你需要的东西。
install文件夹大概长这样:
是不是有一种很亲切的感觉。
然后就是配置环境变量,配置VS还有用程序测试了。这个写在最后,继续往下翻。
-------------------------------------------------------
先说几个大坑,要特别注意,不然会浪费掉很多时间:
-------------------------------------------------------
1、要特别注意,Cmake的版本不要用最新的3.5,一定要用3.4.3,不然会出现很多问题,比如说:
无法打开输入文件“..\..\lib\Release\opencv_bioinspired310.lib”
之类的错误。
刚开始最头疼的就是OpenCV的 bioinspired(和医学,生物图像处理相关的一些功能) 这个库编译不出来,想着反正这个库也不用上,就在Cmake的时候不选他,但是如果不选,就会出现其他的一些文件找不到之类的问题。最后换了Cmake3.4.3之后一切正常。估计是Opencv或者是CUDA没有针对最新的Cmake修改。
2、Cmake完成之后,不要全部编译,这样如果到后边出问题了,前边编译了很长时间就浪费了。编译之前先选几个比较容易出问题的项目编译一下试试,比如:opencv_core, opencv_bioinspired, opencv_cudaarithm, opencv_cudabgsegm.尤其是opencv_cudaarithm, opencv_cudabgsegm这两个项目,编译起来非常慢而且最容易出问题。编译方法,在项目上 右键->生成。
3、如果全部编译完毕之后,如果有一两个项目没有编译成功,没必要再全部重新编译,直接在Cmake编译的目录里的modules目录里找到失败的类,进去用VS打开是项目,重新编译一下即可。
比如,我的opencv_cudabgsegm 项目最后编译失败,我就在D:\opencv310_CUDA\modules\ 下找到 cudabgsegm,进入目录双击 INSTALL.vcxproj ,用VS打开项目。然后生成一次(如下图,在CmakeTargets下的INSTALL上右键->生成),就可以在install文件夹里找到之前失败的lib文件了。
配置编译好的OpenCV:
1、配置环境变量:
在Path中添加: D:\opencv310_CUDA\install\x64\vc12\bin;
(其实我在用户的环境变量中也加了一条,不过貌似加不加都行)
配置完环境变量,重启或注销才能生效
2、配置VS的项目属性:
新建一个控制台应用程序,然后在项目名称上右键->属性:
然后:
(路径以你的电脑实际为准)
(注意配置平台信息32位 还是64位,还有Release和Debug)
VC++目录 下的:
包含目录 添加以下内容:
D:\opencv310_CUDA\install\include
D:\opencv310_CUDA\install\include\opencv
D:\opencv310_CUDA\install\include\opencv2
库目录 添加以下内容:
D:\opencv310_CUDA\install\build\x64\vc12\lib
在链接器 下的:
输入->附加依赖项 添加(注意发布版本不一样,Debug版的带“d”, Release版的不带):
(Release版)
opencv_aruco310.lib
opencv_bgsegm310.lib
opencv_bioinspired310.lib
opencv_calib3d310.lib
opencv_ccalib310.lib
opencv_core310.lib
opencv_cudaarithm310.lib
opencv_cudabgsegm310.lib
opencv_cudacodec310.lib
opencv_cudafeatures2d310.lib
opencv_cudafilters310.lib
opencv_cudaimgproc310.lib
opencv_cudalegacy310.lib
opencv_cudaobjdetect310.lib
opencv_cudaoptflow310.lib
opencv_cudastereo310.lib
opencv_cudawarping310.lib
opencv_cudev310.lib
opencv_datasets310.lib
opencv_dnn310.lib
opencv_dpm310.lib
opencv_face310.lib
opencv_features2d310.lib
opencv_flann310.lib
opencv_fuzzy310.lib
opencv_highgui310.lib
opencv_imgcodecs310.lib
opencv_imgproc310.lib
opencv_line_descriptor310.lib
opencv_ml310.lib
opencv_objdetect310.lib
opencv_optflow310.lib
opencv_photo310.lib
opencv_plot310.lib
opencv_reg310.lib
opencv_rgbd310.lib
opencv_saliency310.lib
opencv_shape310.lib
opencv_stereo310.lib
opencv_stitching310.lib
opencv_structured_light310.lib
opencv_superres310.lib
opencv_surface_matching310.lib
opencv_text310.lib
opencv_tracking310.lib
opencv_ts310.lib
opencv_video310.lib
opencv_videoio310.lib
opencv_videostab310.lib
opencv_xfeatures2d310.lib
opencv_ximgproc310.lib
opencv_xobjdetect310.lib
opencv_xphoto310.lib (Debug 版)
opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_bioinspired310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_cudaarithm310d.lib
opencv_cudabgsegm310d.lib
opencv_cudacodec310d.lib
opencv_cudafeatures2d310d.lib
opencv_cudafilters310d.lib
opencv_cudaimgproc310d.lib
opencv_cudalegacy310d.lib
opencv_cudaobjdetect310d.lib
opencv_cudaoptflow310d.lib
opencv_cudastereo310d.lib
opencv_cudawarping310d.lib
opencv_cudev310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_tracking310d.lib
opencv_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib PS:这些文件是我用python写的脚本生成出来的,不要一个一个从lib文件夹里把名字里拷出来,容易出错,而且工作量挺大。一共106个,各53个。
测试:
把opencv源码中的例子拿出来测试:
代码在: opencv-master\samples\cpp\tutorial_code\gpu\gpu-basics-similarity\gpu-basics-similarity.cpp
把代码拷到刚才建的那个VS项目里,然后生成。
注意:这里不能直接运行,这个程序要接受参数才能运行。
打开command终端, 进入编译出来的文件存放的目录,再拷两张图片到这个路径,然后用一下命令运行:
OpenCV_CUDAtest.exe left.jpg right.jpg 10
TMD这个结果显示,我的CUDA的计算速度比CPU的还慢,好像有点坑爹啊。
写在最后:据我了解,CUDA并不是一定就会比纯CUP快的,GUP更擅长处理大规模的并行计算,不擅长逻辑运算,而且在OpenCV中,要想用GPU处理,就必须先把数据转换成GPU可以处理的数据类型,然后再传输到GPU中处理,其中数据传输只能通过系统总线,速度会很慢。因此在选择CUDA的时候要慎重考虑,并不是所有的程序都适合CUDA的,说不定有的程序用了CUDA反而更慢了。估计也就是这个原因,网上Opencv + CUDA的资料才会比较少吧。
要详细了解CUDA原理以及优劣势,请自己查找更详细的资料。
Reference:
http://www.nmtree.net/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html
http://blog.csdn.net/xizero00/article/details/50823020
blog.csdn.net/kelvin_yan/article/details/48708227
http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html
http://blog.csdn.net/Kelvin_Yan/article/details/38866795
Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013的更多相关文章
- Win10下Android studio配置
Win10下Android studio配置 一.安装Android Studio的准备工作 1.下载好JDK,去官网上找一个下载下来 2.安装JDK.并配置环境变量.安装过程:本人将使用的是jdk- ...
- win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件
win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件 1.去git上下载react-devtools文件到本地,https://github.com/fac ...
- Windows下CMake编译安装OpenCV
Windows下CMake编译安装OpenCV 这是一个面向新手的在windows上运进opencv, helloword的教程. 在这里我们使用vs2019来编译opencv, 并运行一个hello ...
- linux下cmake编译安装、配置和卸载mysql
WIN10下虚拟机:VMware workstation 12 PRO 安装 # 1.查看系统版本 [root@vm-xiluhua][/home/xiluhua]$ cat /etc/redhat- ...
- win10使用cmake编译libevent(解决依赖openssl)
概述 win10没有安装openssl cmake version: 3.18 libevent version: 2.1.10-stable libevent目前的版本中写好了 CMakeLists ...
- linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记
上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...
- 用CMAKE编译配置的项目进行调试的方法
在Linux 下用CMAKE编译的项目进行Debug 需进行设置: 1.在未设置之前 进行调试可能会出现错误报告:No source available for ...等一系列错误,这些错误可能就是你 ...
- win10下安装Cygwin配置gcc编译环境
首先要说明的是,我个人安装cygwin的用途是为了使用kenlm工具训练通及语言模型. 注:统计语言模型工具有比较多的选择,目前比较好的有srilm以及kenlm,其中kenlm比srilm晚出来,训 ...
- win7下cmake编译opencv2.3.1生成opencv—createsamples.exe和opencv_haartrainingd.exe
第一步:下载安装cmake,之后进行默认安装即可,这步略过. 第二步:配置cmake ,使cmake找到opencv进行编译安装 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
随机推荐
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- C# 解析json数据出现---锘縖
解析json数据的时候出现 - 锘縖,不知道是不是乱码,反正我是不认识这俩字.后来发现是json的 '[' 字符转换的 网上搜了一下,说的是字符集不匹配,把字符集改为GB2312. 一.贴下处理jso ...
- Python入门之Python在Win10环境下的配置(图文教程)
请在Python官网下载Python2.7和Python3.6安装包,虽然最新的是3.6版本,但是建议两个包都安装,方便后期在IDE工具切换. Python官网:https://www.python. ...
- CMDB开发
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- 文本处理三剑客之grep
grep grep(支持基本正则表达式),egrep(支持扩展的正则表达式),fgrep(快速的grep,不支持正则表达式) grep是一个最初用于Unix操作系统的命令行工具.在给出文件列表或标准输 ...
- web开发 c/s结构 和 b/s结构
web开发 c/s结构 和 b/s结构 c/s结构 --client/server 客户端/服务器机构 如qq b/s结构 -- browser/server 浏览器/服务器结构 如网站 mvc设计 ...
- tkinter打招呼
import tkinter as tk #导入tkinter模块声明为tk class App:#创建一个类名称为App def __init__(self,master):#传入的参数顶层窗口在这 ...
- z-index的学习整理转述
前言:这是笔者第一次写博客,主要是学习之后自己的理解.如果有错误或者疑问的地方,请大家指正,我会持续更新! z-index属性描述元素的堆叠顺序(层级),意思是A元素可以覆盖B元素,但是B元素并没有消 ...
- 视觉slam学习之路(一)看高翔十四讲所遇到的问题
目前实验室做机器人,主要分三个方向,定位导航,建图,图像识别,之前做的也是做了下Qt上位机,后面又弄红外识别,因为这学期上课也没怎么花时间在项目,然后导师让我们确定一个方向来,便于以后发论文什么. ...
- Python 装饰器示例
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke def applePrice(func): def otherfunc(): ...