一、准备工作
1、下载OpenCV安装包
https://github.com/opencv/opencv/tree/3.1.0
安装完成结果如下
2、下载opencv_contrib源码
https://github.com/opencv/opencv_contrib/tree/3.1.0
解压结果如下
注意版本号要对应
3、下载并解压TBB 4.4 Update 3
4、下载并解压Eigen 3.2.8
http://bitbucket.org/eigen/eigen/get/3.2.8.zip
5、新建文件夹opencv3.1.0_with_contrib,最终的目录结构为
6、自行下载安装cmake-gui工具
二、生成OpenCV.sln
1、设置源码路径和编译路径,点击Configure
2、在Search输入OPENCV_EXTRA_MODULES_PATH,将其参数值设置为open_contrib源码包中的modles目录
3、在Search输入CUDA_HOST_COMPILER,将其参数值设置为VS2015的编译器
4、勾选WITH_TBB,并修改设置如下
5、勾选WITH_EIGEN,并修改设置如下
6、总结
WITH_NVCUVID这一项不能勾选
BUILD_opencv_world不能勾选,我勾选之后编译出错
需要勾选的是:WITH_TBB、WITH_IPP、WITH_EIGEN、WITH_CUBLAS、WITH_CUDA、WITH_CUFFT和WITH_OPENGL
另外,TEST选项我也取消勾选了
7、再次点击Configure,如果没有什么问题,就可以通过Generate生成OpenCV.sln(过程中可以多次点击Configure以刷新配置列表)
三、用VS2015编译OpenCV
1、首先在Debug模式下,右击ZERO_CHECK项目,点击Build;再切换到Release模式下,右击ZERO_CHECK项目,点击Build。看两次编译是否产生错误。如果两次编译成功,则进行下一步
2、开始编译
在Debug状态下,右键ALL_BUILD生成。生成成功后右键INSTALL-仅用于项目-仅生成INSTALL,完成debug的安装
在Release状态下,右键ALL_BUILD生成。生成成功后右键INSTALL-仅用于项目-仅生成INSTALL,完成release的安装
编译成功后,install里的etc,include,x64三个文件夹就是编译得到的OpenCV库
四、测试OpenCV库
新建解决方案,将以下代码拷贝过去,配置OpenCV方法自行百度
#include <iostream>#include <opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> #include <stdio.h> using namespace cv; int main() { Mat srcImg = imread("20200407175433.png", 1); if (srcImg.empty()) return -1; Ptr<cv::Feature2D> detector = xfeatures2d::SIFT::create(128); std::vector<KeyPoint> keypoints; Mat descriptors; detector->detect(srcImg, keypoints); detector->compute(srcImg, keypoints, descriptors); drawKeypoints(srcImg, keypoints, srcImg, Scalar::all(-1), DrawMatchesFlags::DRAW_OVER_OUTIMG); namedWindow("output", WINDOW_AUTOSIZE); imshow("output", srcImg); waitKey(0); return 0; }
运行结果
五、遇到的问题
1、Failed to download opencv_ffmpeg.dll
解决方法:在opencv安装目录下的sources3rdpartyffmpegffmpeg.cmake,可以找到下载对应文件的链接,如:
https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/opencv_ffmpeg.dll
https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/opencv_ffmpeg_64.dll
找到链接后,我用迅雷进行下载,然后放到sources3rdpartyffmpegdownloads对应的目录下即可
2、“ippicv_windows_20151201.zip”not downloaded
解决方法:在opencv安装目录下的sources3rdpartyippicvdownloader.cmake,可以找到下载对应文件的链接,如:
https://raw.githubusercontent.com/Itseez/opencv_3rdparty/81a676001ca8075ada498583e4166079e5744668/ippicv/ippicv_windows_20151201.zip
使用迅雷下载后,放到sources3rdpartyippicvdownloads对应的目录下即可
3、语法错误:标识符"NppiGraphcutState"
解决方案:在graphcuts.cpp中将
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)