vs2015下Cmake3.10編譯Opencv3.4及opencv_contrib3.4在Windows10
0、為何需要自行編譯opencv3.4與opencv_contrib3.4
因為在3.0之後版本的Opencv對Sift、Sufer等新演算法沒有提供直接編譯好的動態庫來載入使用,因此必須自己編譯。這是因為Sift、Sufer演算法專利現在是屬於哥倫比亞大學,因此opencv對這部分內容及“所謂的”不穩定模組全都放到opencv_contrib中。且只在它的Github中能夠找到,opencv的官網上是沒有的。因此對於想使用Sift、Sufer、雙目立體匹配演算法、結構光等新的演算法及有專利權演算法的同學需要自行編譯。
1、下載opencv3.4與opencv_contrib3.4相對應的版本
下載需要的Opencv3.4版本原始碼 https://github.com/opencv/opencv/releases
下載需要的opencv_contrib3.4版本原始碼 (本文.zip檔案) https://github.com/opencv/opencv_contrib/releases
2、Cmake3.10編譯Opencv3.4
如何安裝Cmake3.10可網上查詢很簡單的。開啟Cmake3.10。
原始碼路徑“Source code”選擇你剛才解壓後的Opencv3.4原始碼,本文解壓到了D:/Nyy/image/Opencv_Sourse/opencv34路徑下,這個需要按照你的路徑自行選擇。
編譯輸出路徑“build the binaries”,本文新建資料夾“Opencv34Build”路徑為D:/Nyy/image/Opencv_Sourse/Opencv34Build,同樣這個需要按照你的路徑自行選擇。
單擊“configure”;選擇如下圖設定,單擊“Finish”即可開始編譯。
這個過程會出現很多錯誤需耐心反覆編譯,主要原因是他要從國外網站下載檔案,若下載失敗就編譯不通過,以紅色顯示
若失敗,可在編譯輸出路徑 D:\Nyy\image\Opencv_Sourse\Opencv34Build 中開啟CMakeDownloadLog.txt檔案裡面有下載失敗檔案的連線及下載檔案要儲存到本地的路徑。之後你自己可手動開啟連線自己下載並放到指定的資料夾中最常下載失敗的:opencv_ffmpeg.dll opencv_ffmpeg_64.dll ffmpeg_version.cmake及ippicv_2017u3_win_intel64_general_20170822.zip
下圖(D:\Nyy\image\Opencv_Sourse\Opencv34Build 中的CMakeDownloadLog.txt)是我本次編譯時下載失敗檔案的連線及要儲存檔案的路徑,需要每個都自行下載並放到指定位置即可。
在下載完後放到指定資料夾時需把名字修改名字,首先找到指定儲存路徑“D:\Nyy\image\Opencv_Sourse\opencv34\.cache\ffmpeg”如下圖。如把下載的opencv_ffmpeg.dll名字修改為。
所有下載失敗的的檔案都可以這樣操作,同時需要勾選 BUILD_opemcv_world;主要是把所有的lib檔案都弄到一個opencv_world340d.lib中方便配置,若不勾選在最後會產生大概38個.lib檔案,導致最後配置Opencv3.4到vs2015會太麻煩,有過Opencv2.x配置經驗的都知道。
勾選 BUILD_EXAMPLES;就是編譯OPencv自帶的例程。
完成後再次單擊“Configure”即可。單擊“Configure”直到Cmake3.10沒有紅色顯示為止。
3、Cmake3.10編譯opencv_contrib3.4
選擇OPENCV_EXTRA_MODULES_PATH 把路徑選擇為解壓的opencv_contrib3.4檔案中的“modules”即D:\Nyy\image\Opencv_Sourse\opencv_contrib34\modules 。如下圖:
單擊“Configure”在這部分編譯中同樣會出現下載失敗的情況,
同樣需要到D:\Nyy\image\Opencv_Sourse\Opencv34Build 中的CMakeDownloadLog.txt中找到下載連結自行下載,並放到指定的位置。此部分下載失敗常有:boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_binboost_064.i 及face_landmark_model.dat 同樣找到下載並替換。(這裡可能需要多次的反覆才能完成,需要耐心!!!)
再次單擊“Configure”。直到Cmake3.10沒有紅色顯示為止。如下圖
最後單擊“Generate”完成Cmake3.10編譯的最後工作
4、vs2015的最後編譯
打來編譯輸出檔案 D:\Nyy\image\Opencv_Sourse\Opencv34Build 找到 Opencv.sln開啟工程檔案
因為我要編譯為Debug X64 因此選擇如下圖。
此時即可開始編譯即:生成->生成解決方案,隨後漫長的等待。那個錯誤是與Python有關不用考慮
選擇 CMakeTargets下的INSTALL右鍵選擇僅用於專案->僅生成INSTALL即可,之後會在D:\Nyy\image\Opencv_Sourse\Opencv34Build 找到一個install資料夾即為最後編譯生成的Opencv3.4配置需要檔案。
5、Opencv3.4與VS2015的配置與測試
我把install資料夾下的內容全部複製到VsOpencv3.4\build資料夾中作為最終的編譯檔案使用,可以把Opencv34Build內容刪除(因為它實在太大了有6.5g大小)
a、將D:\Nyy\image\VsOpencv3.4\build\x64\vc14\bin新增到環境變數
b、將D:\Nyy\image\VsOpencv3.4\build\include D:\Nyy\image\VsOpencv3.4\build\include\opencv D:\Nyy\image\VsOpencv3.4\build\include\opencv2 新增到“包含目錄中”
c、將D:\Nyy\image\VsOpencv3.4\build\x64\vc14\lib新增到 “庫目錄中”
d 、將opencv_world340d.lib新增到“附加依賴庫中”
測試程式碼:
#include <stdio.h>
#include <iostream>
#include "opencv2/opencv.hpp"
#include"opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include"opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat img_1 = imread("D:/Nyy/image/Images_Data/sift1.jpg", CV_LOAD_IMAGE_COLOR);
Mat img_2 = imread("D:/Nyy/image/Images_Data/sift2.jpg", CV_LOAD_IMAGE_COLOR);
Ptr<Feature2D> sift = xfeatures2d::SIFT::create();
vector<KeyPoint> keypoints_1, keypoints_2;
Mat descriptors_1, descriptors_2;
sift->detectAndCompute(img_1, noArray(), keypoints_1, descriptors_1);
sift->detectAndCompute(img_2, noArray(), keypoints_2, descriptors_2);
//繪製特徵點(關鍵點)
drawKeypoints(img_1, keypoints_1, descriptors_1, Scalar(0, 0, 255));
drawKeypoints(img_2, keypoints_2, descriptors_2, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("img_1", descriptors_1);
imshow("img_2", descriptors_2);
waitKey(0);
return 0;
}
測試結果:
https://download.csdn.net/download/niuyuanye/10295881
這個連結是本文編譯好的vs2015 X64Debug下的Opencv3.4+Opencv_contrib3.4檔案。包括編譯過程中很麻煩下載的的檔案opencv_ffmpeg.dll opencv_ffmpeg_64.dll ffmpeg_version.cmake及 ippicv_2017u3_win_intel64_general_20170822.zip boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_binboost_064.i 及face_landmark_model.dat同時包含sift運算元的測試程式碼
4.28 把vs2015 X64Release和vs2015 X64Debug下的Opencv3.4+Opencv_contrib3.4檔案再次編譯放在VsOpencv3.4DR檔案中: 已經再次測試可以執行。
https://download.csdn.net/download/niuyuanye/10381863