Win10+Vs+CMake安装OpenCV+contrib
文章目錄
- 0.前言
- 1.準備工作
- 1.1.下載Vs
- 1.2.下載CMake
- 1.3.下載OpenCV和opencv-contrib
- 2.CMake編譯Opencv和contrib源碼(重點)
- 2.1.初次config
- 2.2.再次config
- 2.3.解決文件下載失敗報錯
- 2.4.解決找不到python2的可執行文件報錯
- 2.5.生成工程
- 3.使用Vs打開工程編譯
- 3.1.報錯1:沒有那個文件或目錄
- 3.2.報錯2:編譯時頭文件不對
- 3.3.報錯3:LNK1104 無法打開文件“python37_d.lib”
- 3.4.編譯工程
- 3.5.新建工程測試
- 4.遺留問題
- 5.資源分享(僅針對opencv4.5.1版本)
0.前言
? 由于需要使用Opencv中的Aruco碼進行位姿估計,而Aruco的功能在opencv-contrib模塊中。而直接在官網下載的編譯好的Opencv(即含有build文件夾)不包含contrib模塊,因此如果想使用contrib模塊,必須使用源碼再次進行編譯安裝。此外,如果之前已經安裝了opencv,想追加安裝contrib模塊,也是這種操作,因為cintrib必須和opencv一起編譯,并不能單獨編譯使用。
? 我在經歷了多次失敗后成功從源碼編譯安裝了Opencv+contrib,在此做一個記錄。主要的參考是B站兩個Up主的視頻( 參考視頻1 參考視頻2 ),在此表示感謝。
1.準備工作
1.1.下載Vs
? 參考
? 此處我使用的是vs2017,下載時的選項如下(圖片使用的是網圖,其中安裝的是vs2019):
1.2.下載CMake
? 參考
1.3.下載OpenCV和opencv-contrib
opencv下載
下載地址:https://opencv.org/releases/
這里到官網下載exe文件和Source文件均可,exe文件雙擊后會解壓文件到某個位置,解壓后的文件內容如下:
opencv_contrib下載
下載地址:https://github.com/opencv/opencv_contrib/releases
解壓opencv_contrib壓縮包到opencv目錄下
務必注意:Opencv的版本和contrib的版本必須要一致!
2.CMake編譯Opencv和contrib源碼(重點)
參考視頻1 參考視頻2 參考博客1
2.1.初次config
-
在opencv的目錄下新建一個文件夾,用于存放一會用cmake編譯生成的vs工程
-
打開cmake,選擇源碼路徑和編譯的工程存放路徑
?
- 點擊config,配置編譯工具
- 開始編譯,等待。這里一般會出現網絡問題,即文件下載不成功:
2.2.再次config
-
先不管上面的報錯信息,繼續進行下一步:
-
等待config完成,同樣會報錯。config一次可能上面的選項中還是會有紅色,如下圖所示。此時再次點擊config,直到紅色消失:
2.3.解決文件下載失敗報錯
- 打開OpenCV4.5.1/new_build/CMakeDownloadLog.txt文件,查看報錯信息
進入到CMakeDownloadLog.txt文件中所指示的文件存儲位置可以發現,很多文件都的大小都是0Kb,可見文件并沒有完整下載下來,因此報了上面的錯誤。在這里我們先解決4個文件下載失敗的問題,分別是
以上三個文件都是可以下載的,根據CMakeDownloadLog.txt文件中的網址,用瀏覽器輸入網址把這三個文件下載下來,然后復制到指定的位置,再將文件名改為“md5校驗碼-文件名”的形式即可。
如果這個文件在Cmake中也沒有下載成功的話,輸入網址進去會發現它不能下載,而是直接顯示文件的內容。直接把網頁中顯示的文件內容復制,然后到文件的存儲位置用記事本打開文件,粘貼進去即可。
-
剩下的 .i 文件
看cmake的報錯可以發現,還剩下xfeatures2d/boostdesc文件夾下的文件下載失敗,如圖所示:
還有xfeatures2d/vgg文件夾下的文件下載失敗,如圖所示:
同樣,這些文件和ffmpeg_version.cmake文件一樣,輸入網址進去也不能下載,網頁會顯示文件內容,如圖所示。此時直接將網頁內容復制然后粘貼到文件中去,或者右鍵另存為txt下載即可。
但是經過我的測試,把這些.i文件按照上面那4個文件的做法,復制到指定位置并且重命名后,再進入到Cmake中編譯,還是會下載文件,并且這些重命名后的文件全部又變成了0Kb。原因不明,所以這里先不更改復制這些文件到指定位置。
正確的操作是:輸入這些文件的網址,然后右鍵另存為,這些文件在后面會使用到,文件名會自動生成,不必更改。
如下圖,是我得到的所有.i文件:
2.4.解決找不到python2的可執行文件報錯
CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):CMake's 'find_host_package(PythonInterp 2.7)' found wrong Python version:PYTHON_EXECUTABLE=C:/Users/xx/AppData/Local/Programs/Python/Python38/python.exePYTHON_VERSION_STRING=3.8.2Consider providing the 'PYTHON2_EXECUTABLE' variable via CMake command lineor environment variables........報錯的內容如上,大致的意思就是cmakelists中用到了python2.7,而這個python2.7是使用一個叫PYTHON_EXECUTABLE的環境變量指向的,但是因為沒定義這個環境變量,它直接指向了默認的python版本,也就是python3的版本。所以解決的辦法就是把添加這個環境變量,并將其內容更改為python2.7的可執行文件。如圖所示。具體操作見: 參考
2.5.生成工程
經過以上步驟之后,除了.i文件的下載問題未解決之外,其他的問題已經都解決了。這時候再次點擊config,應該會發現輸出的報錯中只剩.i文件下載失敗的錯誤了。這里不管他,直接點擊generate生成工程。
3.使用Vs打開工程編譯
參考
注意:倘若直接編譯的話,會產生如下3.1、3.2和3.3的錯誤。因為編譯的時間非常長,所以這里就未雨綢繆,先根據原因消除錯誤再進行編譯。
3.1.報錯1:沒有那個文件或目錄
問題:編譯OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件。
解決:添加.i文件到指定目錄。將在上一節中下載的.i文件,全部復制到E:\OpenCV4.5.1\opencv_contrib-4.5.1\modules\xfeatures2d\src路徑下即可。如圖所示:
如果不進行這一步的操作的話,最后編譯工程會產生如下錯誤,可以看到其中就有提示找不到.i文件。
3.2.報錯2:編譯時頭文件不對
問題:
fatal error: features2d/test/test_detectors_regression.impl.hpp: 沒有那個文件或目錄 #include "features2d/test/test_detectors_regression.impl.hpp解決:頭文件include地址不對,解決方法如下:
-
將sources/modules/features2d/test/文件下的以下5個文件:
(注意:該目錄下有6個.hpp文件,只拷貝下面五個就可以,不需要拷貝test_precomp.hpp文件)
? 拷貝到opencv_contrib-4.1.0/modules/xfeatures2d/test/文件下。
-
同時,將opencv_contrib-4.1.0/modules/xfeatures2d/test/test_features2d.cpp文件里的
#include "features2d/test/test_detectors_regression.impl.hpp" #include "features2d/test/test_descriptors_regression.impl.hpp"改成:
#include "test_detectors_regression.impl.hpp" #include "test_descriptors_regression.impl.hpp"將opencv_contrib-4.1.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp文件里的
#include "features2d/test/test_detectors_invariance.impl.hpp" #include "features2d/test/test_descriptors_invariance.impl.hpp"改成:
#include "test_detectors_invariance.impl.hpp" #include "test_descriptors_invariance.impl.hpp"
3.3.報錯3:LNK1104 無法打開文件“python37_d.lib”
參考
問題:編譯OpenCV提示LNK1104 無法打開文件“python37_d.lib”,其實原因就是缺少了python的debug版本庫文件,因為一般在安裝python的時候都是沒安裝debug模式。
解決:在解決這個問題之前,請先確保你安裝了python的debug版本,如果沒有,可以修改已經安裝的python,如下圖所示勾選最后一項,然后install
然后,解決方法很簡單,給如下圖所示的項目添加python37_d.lib所在的路徑即可。
以下這兩個操作必不可少!
1、將python37_d.lib所在文件夾的路徑添加到庫目錄里面
2、然后在附加依賴項中添加python37_d.lib,就是剛才找不到的這個庫文件的名字。然后保存即可
3.4.編譯工程
- 進入cmake的編譯目錄,即一開始新建的new_build目錄,點擊Opencv.sln用vs打開。
-
批生成解決方案
-
勾選ALL_BUILD和INSTALL生成解決方案
-
經過漫長的編譯,終于成功了!
3.5.新建工程測試
-
添加環境變量
-
新建空項目,并添加測試源文件
此時添加源文件后,會發現報錯找不到頭文件等等,這是因為還沒有配置項目屬性。
-
配置項目屬性
顯示屬性管理器
為Debug模式新建屬性表
編輯屬性表
-
添加include路徑、library路徑
-
添加鏈接器鏈接的lib路徑
找到上一步添加的庫目錄的路徑,即E:\OpenCV4.5.1\new_build\install\x64\vc15\lib,由于我們之前生成了debug和release兩種類型的庫,所以可以發現該路徑下的庫分為release用的*.lib庫和debug用的 *d.lib庫。由于我們現在配置的是debug模式下的屬性表,所以需要提取所有的 *d.lib文件。
在該目錄下新建一個getDebugLibName.txt文件,內容改為
DIR *d.lib /B >debugLibName.txt意思就是提取當前目錄下的所有文件名以d.lib結尾的文件,然后將文件名輸出到debugLibName.txt文件中。
保存后將getDebugLibName.txt文件重命名為getDebugLibName.bat文件,即編程windows下的批處理文件。然后雙擊這個文件運行,就會得到一個debugLibName.txt文件。
復制該文件里的所有內容,添加到鏈接器的input里面,然后保存屬性表即可。
-
運行項目,發現報錯找不到d.dll文件
這里是因為我們之前添加的Opencv的系統環境變量還沒生效,需要重啟電腦讓環境變量生效。此時重啟即可。
-
再次運行測試項目
注意把測試下項目改成Debug下的x64模式,然后點擊運行。
項目成功運行,把生成的Aruco碼顯示了出來,說明Opencv和contrib模塊都是正常的。 大功告成!
4.遺留問題
在上面添加鏈接器的庫文件的時候,有很多庫文件,我是使用了一個批處理文件得到了這些文件的名稱,然后復制到了屬性表中,這樣操作比較麻煩。
使用cmake進行編譯的時候,有一個BUILD_opencv_world選項,如下圖所示。
如果選擇了這個選項,那么最后使用vs編譯生成.lib庫文件的時候就會生成一個總的opencv_world451d.lib文件,如下圖所示。
但是,我之前勾選了這個選項,在使用vs編譯的時候,會產生很多錯誤,提示找不到opencv_world451d.lib文件。而不勾選這個選項就不會報錯,所以上面的做法中我沒有勾選。由于最后這兩種情況的使用效果是一樣的,并且編譯一次太耗時間,因此我就沒再測試。
5.資源分享(僅針對opencv4.5.1版本)
- cmake下載失敗的文件
鏈接:https://pan.baidu.com/s/1ImP_ut0T45eiaaayNbkwpQ 提取碼:mn5m
- 編譯好的install文件夾,僅使用這個文件夾下的文件就可以進行opencv的開發了。
鏈接: https://pan.baidu.com/s/1aQvsrYty6vjCYPd-HrxLUQ 提取碼:o13u
- 整個opencv4.5.1和contrib文件夾,也就是我上面的教程中生成的所有文件
鏈接:https://pan.baidu.com/s/1bL5d25TH-SxENieST6MEFg 提取碼:h0s6
總結
以上是生活随笔為你收集整理的Win10+Vs+CMake安装OpenCV+contrib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树洞OCR文字识别v1.1.0官方版
- 下一篇: uni-app 188修复弹框问题