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
OpenCVcontrib下載地址:
https://github.com/opencv/opencv_contrib
cmake-gui下載地址(3.7.2): https://cmake.org/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學堂】獲取圖像處理相關知識。