1.
clone源碼
https://github.com/opencv/opencv
2.
安裝cmake
3.
cmake配置的時候,輸出目錄需要另外設置一個目錄,不可以放到源碼目錄
4.
用cmake config的時候有兩個需要在線下載,但是cmake下載不下來
5.
在cmake輸出目錄打開CMakeDownloadLog.txt文件,這里面顯示了下載什么文件,自己把url拷貝出來,在瀏覽器里面下載出來
6.
在CMakeDownloadLog.txt目錄中還記錄了把文件下載到哪里,自己下載完成后,拷貝到目錄
比如我x64的有一個需要下載的文件ippicv_2019_win_intel64_20180723_general.zip
在CMakeDownloadLog.txt文件中顯示了要從https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_win_intel64_20180723_general.zip下載到3rdparty\ippicv目錄中
7.
下載完成后在源碼目錄找到下載這個文件的cmake,比如(opencv\3rdparty\ippicv\ippicv.cmake)
把
ocv_download(FILENAME ${OPENCV_ICV_NAME}
HASH ${OPENCV_ICV_HASH}
URL
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
DESTINATION_DIR "${THE_ROOT}"
ID IPPICV
STATUS res
UNPACK RELATIVE_URL)
if(res)
set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
endif()
改成
set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
上面就是下載,成功后設置res為true,然后再設置環境為下載的文件,我們既然自己手動下載並且放置好了,就可以把這個刪掉了,直接設置環境
8.
這個時候cmake是卡死的,點擊stop,然后config和generate都是灰掉的,直接關掉
9.
再打開cmake,再config,還會有需要下載的文件,同樣下載下來放到對應目錄下,並且配置cmake
這次是ffmpeg的兩個文件
opencv_videoio_ffmpeg.dll
opencv_videoio_ffmpeg_64.dll
這個對應的cmkae是ffmpeg.cmake,把下面的直接刪掉就好了
foreach(id ${ids})
ocv_download(FILENAME ${name_${id}}
HASH ${FFMPEG_FILE_HASH_${id}}
URL
"$ENV{OPENCV_FFMPEG_URL}"
"${OPENCV_FFMPEG_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/"
DESTINATION_DIR ${FFMPEG_DOWNLOAD_DIR}
ID FFMPEG
RELATIVE_URL
STATUS res)
if(NOT res)
set(status FALSE)
endif()
endforeach()
這個就是遍歷下載兩個文件,都下載好了才設置為true,然后后面配置環境,我們已經下載好了,不用這一步了
10.
這時最好重啟電腦
11.
電腦起來后選擇config,第一次結束顯示是紅的,然后再點擊config,這是沒有紅色的選項顯示了
12.
選中BUILD_opencv_world,這個的目的是把所有的lib放到一個lib中,使用更方便
13.
點擊generate生成sln工程
14.
編譯工程是如果碰到了fail,提示無法找到opencv_world411.lib,那就是因為沒有編譯成功
15.
找到工程中modules->opencv_world單獨編譯看看報錯
16.
如果報錯是 fatal error LNK1127: library is corrupt ippicvmt.lib那就是我們剛才設置的時候出現了問題
這是表示這個lib庫損壞了,我們可以在ippicv目錄下把ippicv_win刪掉,然后解壓我們自己下載的壓縮包,再重新編譯
17.
如果正常的話會全部編譯通過
18.
剩下的就是導入到自己的工程使用即可