OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译
OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新編譯
本文僅做學(xué)習(xí)使用,若侵權(quán),請(qǐng)留言刪除
參考文獻(xiàn):
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:
重新編譯的理由是因?yàn)槲覀冊(cè)谟肅++調(diào)用OpenCV時(shí)會(huì)碰到某些庫(kù)文件沒(méi)有的情況。所以一般自己下載源碼,根據(jù)自己的需求生成依賴庫(kù)會(huì)好一些,在這里我們下載Source源碼:
下載完成后右鍵解壓:
解壓縮后將文件夾放入C盤(pán)并以版本號(hào)命名:
解壓縮后里面內(nèi)容如下,同時(shí)創(chuàng)建一個(gè)rebuild文件夾:
Win+R開(kāi)啟cmd后進(jìn)入該文件夾,同時(shí)輸入cmake-gui,可調(diào)用CMake:
首先點(diǎn)擊Browse Source按鍵選擇OpenCV452文件夾路徑:
然后點(diǎn)擊Browse Build按鍵選擇OpenCV452/rebuild文件夾路徑:
繼續(xù)點(diǎn)擊config,下拉選擇自己的VS版本后,選擇x64,點(diǎn)擊Finish:
最后編譯開(kāi)始,在紅框處可以看見(jiàn)變動(dòng):
這里第一次config的完成后,search 中查找一些參數(shù)進(jìn)行相應(yīng)操作:
輸入wo查找BUILD_opencv_world,不要勾選,因?yàn)閾?jù)說(shuō)安裝了anaconda會(huì)導(dǎo)致編譯引入不正確,不能生成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不勾選:
這些操作完成后,再次點(diǎn)擊Configure,若上面仍有紅色則再一次Configure直到?jīng)]有為止:
此時(shí)contrib附加庫(kù)會(huì)需要下載一些文件,一般會(huì)下載失敗,我們需要找到rebuild文件下的CMakeDownloadLog.txt,其中各解釋如下:
我們需要通過(guò)下載源地址將文件放在文件暫存路徑里面,命名則是MD5_文件名。其中 .cmake 和 .i 文件需要右擊另存為來(lái)保存。所有緩存文件在源文件下的 .cache 文件夾中:
操作完成后再次點(diǎn)擊Configure:
此時(shí)在該區(qū)域不再爆紅,則可以進(jìn)行Generate操作:
出現(xiàn) 1 后,點(diǎn)擊 2 ,下一步就是用VS進(jìn)行源碼編譯
2、用vs2017編譯OpenCV源代碼
在Generate之后,我們進(jìn)入opencv/rebuild文件下,可以看到工程文件,雙擊sln文件打開(kāi)vs2017
打開(kāi)vs2017頁(yè)面如下,此時(shí)有兩種模式:Debug和Release,在解決方案中找到CMakeTargets:
第一種模式Debug:選中CMakeTargets中的ALL_BUILD,右擊生成或者重新生成:
完成后轉(zhuǎn)換為Release模式,執(zhí)行相同操作:
在Debug和Release兩個(gè)版本都生成好以后,右擊INSTALL——僅用于項(xiàng)目——僅生成INSTALL:
其下是我踩過(guò)的坑,按以上操作應(yīng)該不會(huì)有坑:
vs2015編譯OpenCV錯(cuò)誤總結(jié)如下:
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沒(méi)有安裝TensorFlow,安裝上就可以。嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài) 錯(cuò)誤 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 選項(xiàng)導(dǎo)致anaconda導(dǎo)入文件混亂,最好不勾選,需要的lib一個(gè)個(gè)導(dǎo)入。同時(shí)也有人說(shuō)不需要生成opencv_worldxxxd.lib,因?yàn)閷?shí)際工程中會(huì)造成大量的冗余OpenCV配置VS實(shí)例驗(yàn)證:
新建項(xiàng)目Ctrl+Shift+N啊,重新命名以及選擇文件保存路徑:
在項(xiàng)目右邊選擇解決方案資源管理器:
點(diǎn)擊源文件右擊選擇添加——新建項(xiàng),新建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 換成你自己圖片的絕對(duì)路徑就可以了,只要修改這一處!!!!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++目錄——庫(kù)目錄
鏈接器——輸入
將以上lib復(fù)制進(jìn)去后一路確定退出。
最后點(diǎn)擊生成——生成解決方案,在點(diǎn)擊調(diào)試開(kāi)始執(zhí)行結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据采集与传输
- 下一篇: android百度地图自动定位