从opencv3开始,将sift、surf等函数相关的库单独拎出来了,若要使用需配置contrib包。本文介绍了如何在vs2017中配置contrib+opencv。所用版本为opencv3.4.6+contrib3.4.6,操作系统为win10,vs2017 community。
配置contrib前我已完整配置过opencv,如果已配置过opencv,在设置路径相关参数时,需要注意调整一下。默认已装好vs。
从最大的同性交友网站上下载opencv和opencv_contrib。均为官方发布的。
opencv: https://github.com/opencv/opencv
opencv_contrib: https://github.com/opencv/opencv_contrib
注意: 进入网页后,点击中间的releases,找到对应版本下载。建议两个版本配套下载,我下载的均为3.4.6版本。
可能遇到的问题: 迅雷下载不下来。
解决办法: 关掉迅雷,网页下载即可,或者用git的工具。
cmake编译器: https://cmake.org/download/
用于编译opencv和contrib工程。下载完后双击安装,全都用默认选项即可。安装完成后桌面上会出现名为CMake (cmake-gui)的快捷方式。
将下载到的opencv文件解压。在E盘(软件安装盘)目录下新建一个文件夹my_opencv,将解压后的opencv和contrib文件夹放进去。再在my_opencv中新建一个空文件夹build,用于存放过会生成的文件。如图所示。
打开cmake,第一行目录定位到刚才那个新建的文件夹下的opencv文件夹中的sources中。第二行定位到刚才新建的build文件夹。之后点configure,点击后在第一行选择对应你的环境的选项。如我的是64位的vs2017,我就选择Visual Studio 15 2017 Win64。点击finish。
configure后开始编译opencv3.4.6的源代码,输出至build文件夹。这步配置如图所示。
点击configure后,他会开始编译,这步需要较长的时间(约20分钟?记不清了)。编译结束后,configure上面那个框会红一片,没事,再点一次configure,再等一会,就全白了。
之后在configure上面那个框中,找到BUILD_opencv_world选项,打钩,这样之后就可以用一个opencv_world的lib代替所有lib了。
然后找到OEPNCV_EXTRA_MODULES_PATH选项,点一下该选项右边空白处,定位到之前的contrib文件夹里的modules文件夹。这步如图所示。(做这步的时候背景应该是白色的,我就不重新编译改颜色了)
至于这行上面那个OPENCV_ENABLE_NOFREE选项,有人说勾有人说不用,保险起见我还是勾上了。
配置好上述两个选项后,再点一次configure,对没错你还是要等好久。等他done之后又是一片红,对没事再点一次configure,好了白了,编译完了。
高亮提醒!!!:在编译过程中(你的普通网络有些文件不能直接下载!!) 如果你用的是普通网络,会在下载过程中等更久的时间(有一些文件会一直等待传输直到超时失败)。
网上的解决方法: 在第一次configure后,打开my_opencv\build目录下的CMakeDownloadLog.txt文件中查找缺失的文件,再去网上单独下载,放到对应目录中。
我的操作体验: 相比我用别的网络下载的那台电脑的结果所示,他少下载的文件似乎并没有全在log日志里通过miss的方式告诉我。这步没有仔细研究,我也不知道少了那些文件影响大不大。
我用的解决方法: 刚点击发布博客的时候发现csdn提示我不让我说,就把这段涉及的相关内容改隐晦了一些。
(1)进入之前创建的my_opencv中的build文件夹,可以看到这里面多了一堆东西。点击OpenCV.sln,打开工程,确认上面工具栏中间的选项是Debug,x64。右键解决方案,点重新生成工程。
这步就又要花很多时间了…20~30分钟,吃个饭去吧。
之前都做对的话这步应该不会报错,等他done之后能看到成功生成了xxx个,错误0个,忽略了x个。
(2)之后在解决方案管理器中,找到CMakeTargets文件夹中的INSTALL,右键,选择“仅生成项目”->“仅用于INSTALL”。
这步贼快,喝口水就好了。
至此contrib就配好了。可以通过新建项目使用了!当然了你还得重新配一下项目的环境,和opencv一样的。
新建项目。点击视图->其他窗口->属性管理器,打开后右键项目属性。配置均链接到刚才生成的build文件夹下install文件夹中的文件,打开install后会发现和普通配置opencv的文件夹基本一样。
VC++目录->包含目录:
E:\my_opencv\build\install\include
E:\my_opencv\build\install\include\opencv
E:\my_opencv\build\install\include\opencv2
VC++目录->库目录:
E:\my_opencv\build\install\x64\vc15\lib
连接器->输入->附加依赖项:
opencv_world346d.lib
右键计算机,高级系统设置->环境变量,下面那个框框找到PATH,增加:
E:\my_opencv\build\install\x64\vc15\bin
配好了。如果不放心就重启一下电脑吧。
打开刚才新建的工程,进行测试。确保上面工具栏中间是DEBUG,x64。就可以运行了!
#include
#include
#include
using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("C:\\Users\\xzh\\Desktop\\1.jpg", IMREAD_GRAYSCALE);
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
// SIFT特征点检测
int minHessian = 100;
Ptr<SIFT> detector = SIFT::create(minHessian);//和surf的区别:只是SURF→SIFT
vector<KeyPoint> keypoints;
detector->detect(src, keypoints, Mat());//找出关键点
// 绘制关键点
Mat keypoint_img;
drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
imshow("KeyPoints Image", keypoint_img);
waitKey(0);
return 0;
}