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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Win10+Vs+CMake安装OpenCV+contrib

發布時間:2024/3/13 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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個文件下載失敗的問題,分別是

  • IPPICV 文件:
  • FFMPEG 文件
  • FFMPEG 文件
  • 以上三個文件都是可以下載的,根據CMakeDownloadLog.txt文件中的網址,用瀏覽器輸入網址把這三個文件下載下來,然后復制到指定的位置,再將文件名改為“md5校驗碼-文件名”的形式即可。

  • ffmpeg_version.cmake文件:(這里我在cmake中下載成功了,之前沒有下載成功,)
  • 如果這個文件在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文件)

    test_descriptors_invariance.impl.hpp test_descriptors_regression.impl.hpp test_detectors_invariance.impl.hpp test_detectors_regression.impl.hpp test_invariance_utils.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的全部內容,希望文章能夠幫你解決所遇到的問題。

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