OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译
OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新編譯
本文僅做學習使用,若侵權,請留言刪除
參考文獻:
Windows下 Cmake + VS 編譯 OpenCV (+ opencv_contribute)源碼
OpenCV3.4.1+opencv_contrib編譯:windows 10
win10下利用cmake和vs重新編譯opencv源碼
opencv編譯之后找不到opencv_worldxxx.lib的原因
編譯支持CUDA的Opencv4.2
OpenCV下載地址:https://opencv.org/releases/
opencv_contrib下載地址:https://github.com/opencv/opencv_contrib
1、下載解壓OpenCV452:
重新編譯的理由是因為我們在用C++調用OpenCV時會碰到某些庫文件沒有的情況。所以一般自己下載源碼,根據自己的需求生成依賴庫會好一些,在這里我們下載Source源碼:
下載完成后右鍵解壓:
解壓縮后將文件夾放入C盤并以版本號命名:
解壓縮后里面內容如下,同時創建一個rebuild文件夾:
Win+R開啟cmd后進入該文件夾,同時輸入cmake-gui,可調用CMake:
首先點擊Browse Source按鍵選擇OpenCV452文件夾路徑:
然后點擊Browse Build按鍵選擇OpenCV452/rebuild文件夾路徑:
繼續點擊config,下拉選擇自己的VS版本后,選擇x64,點擊Finish:
最后編譯開始,在紅框處可以看見變動:
這里第一次config的完成后,search 中查找一些參數進行相應操作:
輸入wo查找BUILD_opencv_world,不要勾選,因為據說安裝了anaconda會導致編譯引入不正確,不能生成opencv_worldxxx.lib文件,
輸入mo查找OPENCV_EXTRA_MODULES_PATH:
輸入NON朝招OPENCV_ENABLE_NONFREE勾選:
輸入SET查找OPENCV_GENERATE_SETUPVARS不勾選:
輸入test查找OPENCV_PERF_TESTS、BUILD_TESTS、BUILD_opencv_python_tests不勾選:
輸入java查找BUILD_JAVA、BUILD_opencv_java_bingdings_generator不勾選:
輸入python查找BUILD_opencv_python3、BUILD_opencv_python_bingdings_generator不勾選:
這些操作完成后,再次點擊Configure,若上面仍有紅色則再一次Configure直到沒有為止:
此時contrib附加庫會需要下載一些文件,一般會下載失敗,我們需要找到rebuild文件下的CMakeDownloadLog.txt,其中各解釋如下:
我們需要通過下載源地址將文件放在文件暫存路徑里面,命名則是MD5_文件名。其中 .cmake 和 .i 文件需要右擊另存為來保存。所有緩存文件在源文件下的 .cache 文件夾中:
操作完成后再次點擊Configure:
此時在該區域不再爆紅,則可以進行Generate操作:
出現 1 后,點擊 2 ,下一步就是用VS進行源碼編譯
2、用vs2017編譯OpenCV源代碼
在Generate之后,我們進入opencv/rebuild文件下,可以看到工程文件,雙擊sln文件打開vs2017
打開vs2017頁面如下,此時有兩種模式:Debug和Release,在解決方案中找到CMakeTargets:
第一種模式Debug:選中CMakeTargets中的ALL_BUILD,右擊生成或者重新生成:
完成后轉換為Release模式,執行相同操作:
在Debug和Release兩個版本都生成好以后,右擊INSTALL——僅用于項目——僅生成INSTALL:
其下是我踩過的坑,按以上操作應該不會有坑:
vs2015編譯OpenCV錯誤總結如下:
d:\users\humeme\desktop\opencv452\modules\dnn\misc\tensorflow\op_def.pb.h(17): fatal error C1189: #error: This file was generated by an older version of protoc which is (編譯源文件 D:\Users\humeme\Desktop\opencv452\modules\dnn\misc\tensorflow\op_def.pb.cc)解決方案:這是由于anaconda沒有安裝TensorFlow,安裝上就可以。嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態 錯誤 C1189 #error: This file was generated by an older version of protoc which is (編譯源文件 D:\Users\humeme\Desktop\opencv440\modules\dnn\src\onnx\onnx_graph_simplifier.cpp) opencv_world D:\Users\humeme\Desktop\opencv440\modules\dnn\misc\onnx\opencv-onnx.pb.h 17 解決方案:這里是由于勾選了 BUILD_opencv_world 選項導致anaconda導入文件混亂,最好不勾選,需要的lib一個個導入。同時也有人說不需要生成opencv_worldxxxd.lib,因為實際工程中會造成大量的冗余OpenCV配置VS實例驗證:
新建項目Ctrl+Shift+N啊,重新命名以及選擇文件保存路徑:
在項目右邊選擇解決方案資源管理器:
點擊源文件右擊選擇添加——新建項,新建cpp文件并命名:
新建后輸入以下代碼,注意修改圖片的路徑:
#include "opencv2/core/utility.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp"#include <stdio.h>using namespace cv; using namespace std;int edgeThresh = 1; Mat image, gray, edge, cedge;// define a trackbar callback static void onTrackbar(int, void*) {blur(gray, edge, Size(3, 3));// Run the edge detector on grayscaleCanny(edge, edge, edgeThresh, edgeThresh * 3, 3);cedge = Scalar::all(0);image.copyTo(cedge, edge);imshow("Edge map", cedge); }static void help() {printf("\nThis sample demonstrates Canny edge detection\n""Call:\n"" /.edge [image_name -- Default is ../data/fruits.jpg]\n\n"); }const char* keys = {"{help h||}{@image |../data/fruits.jpg|input image name}"};int main(int argc, const char** argv) {CommandLineParser parser(argc, argv, keys);if (parser.has("help")){help();return 0;}//!!!!這里將 filename 換成你自己圖片的絕對路徑就可以了,只要修改這一處!!!!string filename = "D:/VSCODE/canny_detect/111.png";image = imread(filename, 1);if (image.empty()){printf("Cannot read image file: %s\n", filename.c_str());help();return -1;}cedge.create(image.size(), image.type());cvtColor(image, gray, COLOR_BGR2GRAY);// Create a windownamedWindow("Edge map", 1);// create a toolbarcreateTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar);// Show the imageonTrackbar(0, 0);// Wait for a key stroke; the same function arranges events processingwaitKey(0);system("pause");return 0; }選擇屬性管理器雙擊Microsoft.Cpp.x64.user:
選擇VC++目錄——包含目錄:
D:\Users\humeme\Desktop\rebuild\install\include D:\Users\humeme\Desktop\rebuild\install\include\opencv2選擇VC++目錄——庫目錄
鏈接器——輸入
將以上lib復制進去后一路確定退出。
最后點擊生成——生成解決方案,在點擊調試開始執行結果如下:
總結
以上是生活随笔為你收集整理的OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据采集与传输
- 下一篇: android百度地图自动定位