OpenCV 3.1.0编译与添加扩展模块
最近在弄个东西,需要把OpenCV的扩展模块中的xfeatures给包含进来,发现要自己编译OpenCV3.1.0与其扩展模块才可以实现。经过一番实践,终于编译完成,总结了一下,其实很简单,只要如下三步即可实现。在正式开始之前,有些准备工作需要做,就是下载OpenCV3.1.0还有其扩展模块,以及CMake GUI工具。
OpenCV3.1.0下载地址:
https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv-3.1.0.exe/download
把OpenCV就解压缩到指定目录,其中我是把OpenCV解压缩到
然后安装CMake GUI,默认安装即可。
好了之后就正式开始。
第一步
配置与生成CMake, 打开CMake GUI之后,选择好路径,点击配置,在打开的对话框中一定要选择VS14 Windows 64才可以。然后它就会自动运行得到如下结果:
然后找到OPENCV_EXTRA_MODULE_PATH设置扩展模块的路径运行完成显示如下:
第二步:
配置VS生成installer,首先到CMake的Build输出目录
D:\opencv3.1\opencv\newbuild下找到OpenCV.sln文件,双击打开之后,右键选择
->重新生成解决方案,然后在找到CMakeTargets->INSTALL, 右键选择生成installer即可。这样就会在D:\opencv3.1\opencv\newbuild下面多出一个installer的文件夹,到如果能成功生成,编译就结束了。
第三步:
重新配置OpenCV,新建一个项目打开,到【视图】-》【其它窗口】-》【属性管理器】然后选择64 debug下的User Cpp从属性中打开配置窗口
分别设置好 包含目录
库目录
还有附件依赖项中添加如下:
opencv_calib3d310d.lib
opencv_core310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_photo310d.lib
opencv_shape310d.lib
opencv_stitching310d.lib
opencv_superres310d.lib
opencv_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
ippicvmt.lib
opencv_xfeatures2d310d.lib
opencv_xobjdetect310d.lib
最后千万别忘记把bin目录改过来, 我的编译生成的OpenCV v14/bin的目录如下:
D:\opencv3.1\opencv\newbuild\install\x64\vc14\bin
添加到系统的环境变量中即可。把原来的去掉。这样就可以使用OpenCV扩展模块xfeatures2d了。测试代码与运行结果如下:
#include <stdio.h> #include <iostream> #include "opencv2/core.hpp" #include "opencv2/features2d.hpp" #include "opencv2/xfeatures2d.hpp" #include "opencv2/highgui.hpp" using namespace cv; using namespace cv::xfeatures2d; using namespace std; int main(int argc, char** argv) { Mat img_1 = imread("D:/vcprojects/images/test.png", IMREAD_GRAYSCALE); if (img_1.empty()) { printf("could not load image...\n"); return -1; } imshow("input image", img_1); int minHessian = 400; Ptr<SURF> detector = SURF::create(minHessian); vector<KeyPoint> keypoints; detector->detect(img_1, keypoints); Mat img_keypoints1; drawKeypoints(img_1, keypoints, img_keypoints1, Scalar::all(-1), DrawMatchesFlags::DEFAULT); namedWindow("key points", CV_WINDOW_AUTOSIZE); imshow("key points", img_keypoints1); waitKey(0); return 0; }
基于xfeature实现SURF特征检测的运行结果如下:
关注微信公众号【OpenCV学堂】获取图像处理相关知识。