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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ù)自己的需求生成依賴(lài)庫(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ù)目錄

鏈接器——輸入

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復(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。