一、版本說明
(我發誓這是我最后一次寫Opencv的安裝~_~)
Opencv的穩定版本和擴展版本是分開的,一般我們使用穩定版本就可以了,但是如果設計到人臉識別這些東西,那么就需要用到擴展版本。
各軟件版本:
Opencv3.4.1
Opencv contrib 3.4.1
Cmake 3.16.0
VS 2019
二、基礎准備
首先必須安裝VS,Cmake,這些不多說了。
然后下載Opencv3.4.1:官網鏈接:https://opencv.org/opencv-3-4-1.html
Opencv 3.4.1的擴展模塊:https://github.com/opencv/opencv_contrib
注意這里contrib下載的版本在這里選擇:
三、編譯過程
1-這里我的文件夾如圖:
build是空文件夾,contrib下載的安裝包解壓在了sources文件夾下面(它也可以放在Sources並列位置)
2-打開Cmake
路徑如下:
3-點擊Configure
這個時候開始配置,但是會出現錯誤:
錯誤一:OpenCV does not recognize MSVC_VERSION 1922
我們打開提示對應的Cmake文件,找到對應的位置。
if(MSVC_VERSION EQUAL 1400) set(OpenCV_RUNTIME vc8) elseif(MSVC_VERSION EQUAL 1500) set(OpenCV_RUNTIME vc9) elseif(MSVC_VERSION EQUAL 1600) set(OpenCV_RUNTIME vc10) elseif(MSVC_VERSION EQUAL 1700) set(OpenCV_RUNTIME vc11) elseif(MSVC_VERSION EQUAL 1800) set(OpenCV_RUNTIME vc12) elseif(MSVC_VERSION EQUAL 1900) set(OpenCV_RUNTIME vc14) elseif(MSVC_VERSION MATCHES "^191[0-9]$") set(OpenCV_RUNTIME vc15)
可以看到,由於使用的vs2019,對應版本是1922,所以這里無法識別,
這個時候我們修改如下(大家根據自己的VS對應的版本去添加,一般來說VS2019-vc16, vs2017-vc15):
if(MSVC_VERSION EQUAL 1400) set(OpenCV_RUNTIME vc8) elseif(MSVC_VERSION EQUAL 1500) set(OpenCV_RUNTIME vc9) elseif(MSVC_VERSION EQUAL 1600) set(OpenCV_RUNTIME vc10) elseif(MSVC_VERSION EQUAL 1700) set(OpenCV_RUNTIME vc11) elseif(MSVC_VERSION EQUAL 1800) set(OpenCV_RUNTIME vc12) elseif(MSVC_VERSION EQUAL 1900) set(OpenCV_RUNTIME vc14) #添加這兩行,1922是錯誤提示的vs版本,vc16是對應的工具 elseif(MSVC_VERSION EQUAL 1910) set(OpenCV_RUNTIME vc15) elseif(MSVC_VERSION EQUAL 1922) set(OpenCV_RUNTIME vc16) elseif(MSVC_VERSION MATCHES "^191[0-9]$") set(OpenCV_RUNTIME vc15)
錯誤二:WARNING "Face: Can't get model file for face alignment."
這個時候我們找到對應的cmakelists部分:
set(__commit_hash "8afa57abc8229d611c4937165d20e2a2d9fc5a12") set(__file_hash "7505c44ca4eb54b4ab1e4777cb96ac05") ocv_download( FILENAME face_landmark_model.dat HASH ${__file_hash} URL "${OPENCV_FACE_ALIGNMENT_URL}" "$ENV{OPENCV_FACE_ALIGNMENT_URL}" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/" DESTINATION_DIR "${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}/cv/face/" ID "data" RELATIVE_URL STATUS res ) if(NOT res) message(WARNING "Face: Can't get model file for face alignment.") endif()
發現是其中的數據無法下載:face_landmark_model.dat
但是上面提供了鏈接:https://github.com/opencv/opencv_3rdparty/tree/contrib_face_alignment_20170818
我們下載下來,復制到下面這個文件夾(注意不同版本不一樣,Opencv3.4.1是這樣的)
我們可以看到里面已經有了一個文件,但是沒有下載成功,我們把這個文件刪除,並將復制過來的文件命名為截圖里面的文件名。
4-設置
勾選Build_opencv_world:(這個選項將所有的lib文件集合為一個.lib文件)
設置contrib文件路徑:
設置安裝路徑(這個文件夾是最后使用的)
5-重新點擊Configure,多點擊幾次,直到完全變白
6-點擊Generate
7-點擊OpenProject
三、VS編譯
1-編譯
解決方案選擇Release x64
解決方案里面選擇ALL_BUILD,然后右鍵,選擇生成,開始編譯,大概半個小時到一個小時
2-安裝
單擊INSTALL, 右鍵,選擇“設為啟動項目”
然后生成。所有文件被安裝到install文件里面
四、配置環境變量與屬性
1-配置電腦系統變量
在Path里面添加路徑:
也就是install文件夾里面的bin文件夾
2-VS屬性表配置
興建一個工程,在里面興建一個屬性表Opencv
2.1 VC++目錄
在包含目錄里面添加:
庫目錄里面添加(都是Install文件夾里面的):
2.2 C/C++->常規->附加包含目錄:
2.3 鏈接器->輸入->附加依賴項
opencv_world341.lib
opencv_img_hash341.lib
注意上面我只是編譯安裝了Release x64版本的,所以只有opencv_world341.lib,而沒有出現opencv_world341d.lib,如果需要可以自己再次配置安裝。
至此安裝完成
五參考鏈接
有一部分忘記了。
六、問題補充
我最開始的時候只是安裝了Opencv沒有安裝擴展部分,當再次編譯安裝的時候,出來問題:
這個時候是因為原來的 opencv_world341.dll程序沒有被覆蓋,所以我們需要找到新生成的opencv_world341(install/bin文件夾里面),復制到:
C:\Windows\System32
重新覆蓋即可
另外,各種輸入的時候,路徑不要有錯誤