Win10 下Cmake3.8.0编译配置 Opencv3.2 + Cuda8.0 + VS2010
早就想了解一下opencv3+cuda了,但是一直没有时间,这几天实验了一下,把环境简单的搭一下,编译一下opencv3。这里编译了两个版本,一个是Release另一个是Debug版本的,编译成两个版本一个方便调试,另一个适用于发布。编译完成之后发现编译之后挺大的,而且编译速度也很慢,我是笔记本是i3-7代的处理器,编译一个版本需要半天多时间。
下面来看一下我这里的环境:
Windows10 专业版 64位
Virtual Studio 2010
Opencv 3.2
Cuda 8.0
Cmake 3.8.0 – cmake-3.8.0-rc2-win64-x64
下面介绍一下安装步骤:
1. 首先需要安装TBB:
自行去官网下载,下载后的文件,解压放在任意目录下,然后在Cmake的配置的时候写入相关路径就可以了。
- 安装CUDA:
去NVIDA官网下载,然后按照默认的安装就行可以了。 - OPENCV 和CONTRIB源码下载和配置
解压opencv3.2和contrib源码,然后接下来就是使用cmake进行配置。下图是opencv的源码路径:
打开Cmake,设置源码路径和目标路径(我的目标路径是:D:\Opencv\opencvCuda\CudaVC10Build),点击Configure。
这时会让你选择环境,对应选择就可以。我的是VS 2010,所以选了上边的配置。然后点击 Finish。
说明:Cmake中红色的部分说明还没有更新,需要点击Configure更新,每次更改完一些配置或者参数之后都要点击Configure更新一下。最后确定配置无误了再点Generate,将会在你的目标文件夹中生成项目文件。
- 这里Cmake里边需要先配置点东西:
把下边的
WITH_TBB
WITH_CUDA
都勾选上,其他的项可以暂时不管。
然后设置一下TBB的路径,就可以了,Cuda不用设置,因为先安装了,所以直接就都配置好了。
配置Configure,直到没有红色错误了,就直接Generate。等着Generate完成,你就可以去目标文件夹去看生成的结果了。
4、在你的目标文件中找到OpenCV.sln 文件,并用VS打开:
6、编译完成之后,你会在你的目标文件夹中找到一个install文件夹,里边就有Debug和Release的各种你需要的东西。
install文件夹大概长这样:
编译好了库文件,下面对库文件进行测试:
1、配置环境变量:
在Path中添加: D:\opencv310_CUDA\install\x64\vc12\bin;
(其实我在用户的环境变量中也加了一条,不过貌似加不加都行)
配置完环境变量,重启或注销才能生效
2、配置VS的项目属性:
新建一个控制台应用程序,然后在项目名称上右键->属性:
编译完成之后有一个performance_gpu.exe,这个程序是测试cpu和gpu对比的性能的,下面是我的”GeForce 920MX” 和I3-7600 CPU的性能对比情况,GPU的运算性能还是很牛的。
C:\Users\shenlong>D:\Opencv\opencvCuda\opencv320_vc10_withTBBAndCuda8_install\install\x64\vc10\bin\performance_gpu.exe
VIDEOINPUT LIBRARY - 0.1995 - TFW07
Device 0: “GeForce 920MX” 2048Mb, sm_50, Driver/Runtime ver.8.0/8.0
Note: the timings for GPU don’t include data transfer
CPU, ms GPU, ms SPEEDUP DESCRIPTION
matchTemplate:
184.398 22.3771 x8.24 3000x3000, 32FC1, templ 5x5, CCORR
214.63 76.4628 x2.81 3000x3000, 32FC1, templ 25x25, CCORR
536.663 129.001 x4.16 3000x3000, 32FC1, templ 125x125, CCORR
minMaxLoc:
19.3275 3.32245 x5.82 2000x2000, 32F
80.0574 6.21117 x12.9 4000x4000, 32F
304.139 19.8385 x15.3 8000x8000, 32F
remap:
24.3475 1.13251 x21.5 1000x1000, 8UC4, INTER_LINEAR, BORDER_REPLICATE
82.1895 4.13293 x19.9 2000x2000, 8UC4, INTER_LINEAR, BORDER_REPLICATE
320.333 16.332 x19.6 4000x4000, 8UC4, INTER_LINEAR, BORDER_REPLICATE
dft:
15.5758 9.14862 x1.7 1000x1000, 32FC2, complex-to-complex
68.4957 36.3057 x1.89 2000x2000, 32FC2, complex-to-complex
351.532 148.714 x2.36 4000x4000, 32FC2, complex-to-complex
cornerHarris:
231.604 14.4318 x16 1000x1000, 32FC1, BORDER_REFLECT101
1008.42 60.2772 x16.7 2000x2000, 32FC1, BORDER_REFLECT101
3564.17 219.743 x16.2 4000x4000, 32FC1, BORDER_REFLECT101
integral:
1.40876 2.6825 x0.525 1000x1000, 8UC1
4.72931 22.6212 x0.209 2000x2000, 8UC1
18.9562 56.2427 x0.337 4000x4000, 8UC1
norm:
6.91047 6.93612 x0.996 2000x2000, 32FC4, NORM_INF
15.3296 13.0612 x1.17 3000x3000, 32FC4, NORM_INF
29.975 20.0873 x1.49 4000x4000, 32FC4, NORM_INF
meanShift:
896.396 26.2167 x34.2 400x400, 8UC3 vs 8UC4
3414.51 97.0028 x35.2 800x800, 8UC3 vs 8UC4
FAST:
[error: can’t open ../data/aloeL.jpg]
ORB:
[error: can’t open ../data/aloeL.jpg]
BruteForceMatcher:
1238.29 25.2269 x49.1 match
1212.99 24.3916 x49.7 knnMatch
1170.84 26.6048 x44 radiusMatch
magnitude:
5.37329 3.81861 x1.41 2000x2000, 32FC1
13.1462 8.13406 x1.62 3000x3000, 32FC1
28.1335 13.7003 x2.05 4000x4000, 32FC1
add:
2.82425 3.36488 x0.839 2000x2000, 32FC1
6.20799 7.58944 x0.818 3000x3000, 32FC1
13.1934 13.0197 x1.01 4000x4000, 32FC1
log:
9.47872 2.26958 x4.18 2000x2000, 32F
19.7061 5.02191 x3.92 3000x3000, 32F
34.1571 8.80269 x3.88 4000x4000, 32F
mulSpectrums:
57.3179 6.54501 x8.76 2000x2000
130.15 14.5816 x8.93 3000x3000
247.686 25.7842 x9.61 4000x4000
resize:
54.0771 2.62973 x20.6 1000x1000, 8UC4, up
260.142 10.0503 x25.9 2000x2000, 8UC4, up
571.233 22.5077 x25.4 3000x3000, 8UC4, up
3.51905 0.425339 x8.27 1000x1000, 8UC4, down
10.7333 1.41155 x7.6 2000x2000, 8UC4, down
28.9671 3.09271 x9.37 3000x3000, 8UC4, down
cvtColor:
15.6754 5.6941 x2.75 4000x4000, 8UC1, COLOR_GRAY2BGRA
134.961 9.07922 x14.9 4000x4000, 8UC3 vs 8UC4, COLOR_BGR2YCrCb
160.016 9.41865 x17 4000x4000, 8UC4, COLOR_YCrCb2BGR
50.724 8.82255 x5.75 4000x4000, 8UC3 vs 8UC4, COLOR_BGR2XYZ
47.2838 8.94529 x5.29 4000x4000, 8UC4, COLOR_XYZ2BGR
440.436 11.6987 x37.6 4000x4000, 8UC3 vs 8UC4, COLOR_BGR2HSV
620.386 11.3435 x54.7 4000x4000, 8UC4, COLOR_HSV2BGR
erode:
94.7507 10.1584 x9.33 2000x2000
195.624 22.0857 x8.86 3000x3000
373.351 38.9262 x9.59 4000x4000
threshold:
13.447 0.639762 x21 2000x2000, 8UC1, THRESH_BINARY
35.9581 1.36396 x26.4 3000x3000, 8UC1, THRESH_BINARY
72.8426 2.3113 x31.5 4000x4000, 8UC1, THRESH_BINARY
2.16116 2.20368 x0.981 2000x2000, 32FC1, THRESH_TRUNC [NPP]
5.17755 4.95492 x1.04 3000x3000, 32FC1, THRESH_TRUNC [NPP]
9.24036 8.64236 x1.07 4000x4000, 32FC1, THRESH_TRUNC [NPP]
pow:
27.9441 0.605771 x46.1 1000x1000, 32F
108.132 2.19548 x49.3 2000x2000, 32F
251.506 4.95174 x50.8 3000x3000, 32F
456.103 8.65582 x52.7 4000x4000, 32F
projectPoints:
1110.58 2.81078 x395 1000000
796.858 2.19174 x364 714285
578.326 1.60033 x361 510203
395.173 1.22027 x324 364430
336.528 0.962891 x349 260307
solvePnPRansac:
[error: confidence > 0 && confidence < 1] 5000
GaussianBlur:
38.9446 3.46244 x11.2 1000x1000, 8UC4
173.305 13.2987 x13 2000x2000, 8UC4
371.584 30.3736 x12.2 3000x3000, 8UC4
683.911 52.4725 x13 4000x4000, 8UC4
filter2D:
26.3775 1.57976 x16.7 ksize = 3, 512x512, 8UC4
73.0997 3.69298 x19.8 ksize = 5, 512x512, 8UC4
138.61 6.69799 x20.7 ksize = 7, 512x512, 8UC4
230.957 10.5633 x21.9 ksize = 9, 512x512, 8UC4
320.145 15.3046 x20.9 ksize = 11, 512x512, 8UC4
87.3096 21.0097 x4.16 ksize = 13, 512x512, 8UC4
81.5434 27.6326 x2.95 ksize = 15, 512x512, 8UC4
102.244 5.93009 x17.2 ksize = 3, 1024x1024, 8UC4
266.817 14.3544 x18.6 ksize = 5, 1024x1024, 8UC4
522.097 26.2011 x19.9 ksize = 7, 1024x1024, 8UC4
948.812 41.6351 x22.8 ksize = 9, 1024x1024, 8UC4
1342.37 60.8631 x22.1 ksize = 11, 1024x1024, 8UC4
284.141 83.4153 x3.41 ksize = 13, 1024x1024, 8UC4
239.949 109.829 x2.18 ksize = 15, 1024x1024, 8UC4
397.048 23.332 x17 ksize = 3, 2048x2048, 8UC4
1075.69 56.1142 x19.2 ksize = 5, 2048x2048, 8UC4
2186.86 103.545 x21.1 ksize = 7, 2048x2048, 8UC4
3524.12 165.455 x21.3 ksize = 9, 2048x2048, 8UC4
5249.7 241.89 x21.7 ksize = 11, 2048x2048, 8UC4
772.819 332.932 x2.32 ksize = 13, 2048x2048, 8UC4
795.166 438.687 x1.81 ksize = 15, 2048x2048, 8UC4
pyrDown:
257.527 8.43946 x30.5 4000x4000, 8UC4
140.972 4.85328 x29 3000x3000, 8UC4
67.5335 2.31713 x29.1 2000x2000, 8UC4
17.8979 1.02921 x17.4 1000x1000, 8UC4
pyrUp:
330.228 15.5884 x21.2 2000x2000, 8UC4
87.7771 3.97354 x22.1 1000x1000, 8UC4
equalizeHist:
3.71517 0.83418 x4.45 1000x1000
18.6848 2.52762 x7.39 2000x2000
38.4424 5.50779 x6.98 3000x3000
Canny:
[error: can’t open ../data/aloeL.jpg]
reduce:
67.3614 0.325499 x207 1000x1000, dim = 0
0.384616 0.504699 x0.762 1000x1000, dim = 1
281.984 1.11957 x252 2000x2000, dim = 0
1.23686 1.22358 x1.01 2000x2000, dim = 1
587.379 2.58052 x228 3000x3000, dim = 0
2.65292 2.54502 x1.04 3000x3000, dim = 1
gemm:
[error: The library was build without CUBLAS] 512x512
GoodFeaturesToTrack:
[error: can’t open ../data/aloeL.jpg]
MOG2:
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:779)
warning: ../data/768x576.avi (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:780)
[error: can’t open ../data/768x576.avi]
average GPU speedup: x36.614