最近學習Opencv,然後需要擴展模塊,就需要重新編譯Opencv344,個人的習慣,不喜歡最新的版本,就用了Opencv344這個版本吧。
重新編譯Opencv344分爲幾個步驟。
1、首先下載對應的軟件
2、將下好的軟件重新編譯
3、配置環境
OK,開始下載軟件了
First 首先下載 Opencv344 官方地址:https://opencv.org/opencv-4-0-0.html
順便將源碼一起下載下來,Sources
去github上下載opencv344的擴展模塊 地址:https://github.com/opencv/opencv_contrib/releases
下載 CMake-gui https://cmake.org/download/ 下載 .msi 的版本
參考 cmake-gui 自帶的編譯方法
ok, 該下的東西都下完了。路徑不要有中文路徑,不要亂丟
Second, 重新編譯
1、CMake-gui 安裝 打開CMake, 選擇source code: 和 build the binaries 的目錄(一般在源opencv下新建一個rebuild) 然後點擊 Configuration , 選擇自己電腦對應的VS的版本然後, 一共點擊兩次(第一次編譯之後全是紅的,再來一次) ,等待之後找到 opencv下的 extra modules (search extra 就有了) 然後將opencv_contrib 下的 modules 路徑包含進去(不要複製路徑,點擊後的找到路徑,想知道爲什麼就去直接去百度 / \ 的區別),但是會出現另外一個問題可能低版本的opencv沒有,這是我實際項目中出現的,以前都是310沒有在意(This algorithm is patented and is excluded in this configuration; 專利已經被註冊),繼續search OPENCV_ENABLE_NONFREE,打鉤,然後點擊 generate
2、在rebuild目錄下(生成好的)下找到 opencv.sln 用VS2015打開 然後點擊 CMakeTargets ALL_BUILD 右擊生成 最後成功 138 個
當然了,現在還沒有結束,因爲找不到install 這個文件夾 so ALL_BUILD下面繼續有一個 INSTALL ,右擊生成,然後就可以配置環境了
開始重新配置環境:我是配置了310 後重新編譯 344 版本的 兩者沒關係 310 的不要看 都是一樣的 可能截圖還有 310的東西,自動忽略
找到視圖 屬性管理器
VC++目錄 包含目錄
庫目錄
鏈接器
讀出鏈接器中所有的文件,我是在 Intellijea 下的 Java寫我的 /**
* @param: dir rebulid 目錄下的 install/x64/vc14/lib 的目錄
* @Function: 讀取文件從指定餓的目錄下面
* @Return:
*/
private static void ReadFileFromDir(String dir) {
int i = 0;
File file = new File(dir);
if (file.isDirectory()) {
System.out.println("是目錄可以讀取");
File[] files = file.listFiles();
for (File f : files) {
if (f.getName().endsWith(".lib")) {
i++;
System.out.println(f.getName());
}
}
} else
System.out.println("Error");
System.out.println("一共 " + i + " 個");
} 讀出所有的 .lib 文件
最後環境變量: 找到rebuild install x64 vc14 bin 添加到環境變量中去
@attention: CMake和 添加 opencv的環境變量後 電腦都需要重啓 ,不然和沒有添加報一樣的錯誤
看看自己有沒有成功: 新建 win32 控制檯項目 空項目 添加 include<> 對的文件 ,建立命名空間
int main(int argc,char** argv){
Mat src =imread("test.jpg");
if(src.empty()){
std::cout<<"Error!!!";
}
namedShow("src");
imshow("src",src):
waitKey(0);
return 0:
}