日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译

發布時間:2024/3/12 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++目錄——庫目錄

鏈接器——輸入

opencv_aruco440.lib opencv_aruco440d.lib opencv_bgsegm440.lib opencv_bgsegm440d.lib opencv_bioinspired440.lib opencv_bioinspired440d.lib opencv_calib3d440.lib opencv_calib3d440d.lib opencv_ccalib440.lib opencv_ccalib440d.lib opencv_core440.lib opencv_core440d.lib opencv_datasets440.lib opencv_datasets440d.lib opencv_dnn440.lib opencv_dnn440d.lib opencv_dnn_objdetect440.lib opencv_dnn_objdetect440d.lib opencv_dnn_superres440.lib opencv_dnn_superres440d.lib opencv_dpm440.lib opencv_dpm440d.lib opencv_face440.lib opencv_face440d.lib opencv_features2d440.lib opencv_features2d440d.lib opencv_flann440.lib opencv_flann440d.lib opencv_fuzzy440.lib opencv_fuzzy440d.lib opencv_gapi440.lib opencv_gapi440d.lib opencv_hdf440.lib opencv_hdf440d.lib opencv_hfs440.lib opencv_hfs440d.lib opencv_highgui440.lib opencv_highgui440d.lib opencv_imgcodecs440.lib opencv_imgcodecs440d.lib opencv_imgproc440.lib opencv_imgproc440d.lib opencv_img_hash440.lib opencv_img_hash440d.lib opencv_intensity_transform440.lib opencv_intensity_transform440d.lib opencv_line_descriptor440.lib opencv_line_descriptor440d.lib opencv_ml440.lib opencv_ml440d.lib opencv_objdetect440.lib opencv_objdetect440d.lib opencv_optflow440.lib opencv_optflow440d.lib opencv_phase_unwrapping440.lib opencv_phase_unwrapping440d.lib opencv_photo440.lib opencv_photo440d.lib opencv_plot440.lib opencv_plot440d.lib opencv_quality440.lib opencv_quality440d.lib opencv_rapid440.lib opencv_rapid440d.lib opencv_reg440.lib opencv_reg440d.lib opencv_rgbd440.lib opencv_rgbd440d.lib opencv_saliency440.lib opencv_saliency440d.lib opencv_shape440.lib opencv_shape440d.lib opencv_stereo440.lib opencv_stereo440d.lib opencv_stitching440.lib opencv_stitching440d.lib opencv_structured_light440.lib opencv_structured_light440d.lib opencv_superres440.lib opencv_superres440d.lib opencv_surface_matching440.lib opencv_surface_matching440d.lib opencv_text440.lib opencv_text440d.lib opencv_tracking440.lib opencv_tracking440d.lib opencv_video440.lib opencv_video440d.lib opencv_videoio440.lib opencv_videoio440d.lib opencv_videostab440.lib opencv_videostab440d.lib opencv_xfeatures2d440.lib opencv_xfeatures2d440d.lib opencv_ximgproc440.lib opencv_ximgproc440d.lib opencv_xobjdetect440.lib opencv_xobjdetect440d.lib opencv_xphoto440.lib opencv_xphoto440d.lib

將以上lib復制進去后一路確定退出。

最后點擊生成——生成解決方案,在點擊調試開始執行結果如下:

總結

以上是生活随笔為你收集整理的OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。