OpenCV下使用Cmake


最近在依照毛新雲的OpenCV3編程入門,在Windows下用CMake編譯OpenCV 3.1.0的源代碼,由於是第一次接觸這些,在學習編譯過程中遇到了很多問題,也耗費了大量的時間,現在將其中一個問題記錄下來,希望可以幫組別人少走彎路。感覺編譯后主要的好處是可以看源代碼。網上傳言OpenCV官方提供的編譯庫一般只是標准版本,可能與某些庫並不兼容,比如官方提供的編譯好的版本與opengl就不兼容,這時就只能自己構建項目后編譯。

首先在CMake官網https://cmake.org/下載了cmake-3.6.2-win64-x64,在編譯過程中,估計是因為CMake的服務器在外國的原因,跨越不了GREATWALL,一直出現下面錯誤提示:

Downloading opencv_ffmpeg_64.dll...

CMake Error at cmake/OpenCVUtils.cmake:895 (file):

file DOWNLOAD HASH mismatch

   

for file: [D:/Program Files (x86)/opencv/sources/3rdparty/ffmpeg/downloads/35fe6ccdda6d7a04e9056b0d73b98e76/opencv_ffmpeg_64.dll]

expected hash: [35fe6ccdda6d7a04e9056b0d73b98e76]

actual hash: [f112aef8bcfad76757e2ebf06c7cf6e5]

status: [28;"Timeout was reached"]

   

Call Stack (most recent call first):

3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)

cmake/OpenCVFindLibsVideo.cmake:206 (include)

CMakeLists.txt:536 (include)

   

CMake Error at cmake/OpenCVUtils.cmake:899 (message):

Failed to download opencv_ffmpeg_64.dll. Status=28;"Timeout was reached"

Call Stack (most recent call first):

3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)

cmake/OpenCVFindLibsVideo.cmake:206 (include)

CMakeLists.txt:536 (include)

   

讀一下這幾行,可以大致了解如下,在編譯過程中,程序下載了一個文件,它的hash值與所期待的不一致,所以導致了錯誤,接下來到CMakeLists.txt文件(在…...\opencv\sources)中去定位,然而看不懂。。。。。。於是去網上搜索opencv_ffmpeg_64.dll下載至....../opencv/sources/3rdparty/ffmpeg/downloads/35fe6ccdda6d7a04e9056b0d73b98e76/ 下載鏈接:http://pan.baidu.com/s/1gfE3gHl

還是錯誤,不過錯誤提示變了:

Downloading opencv_ffmpeg.dll...

CMake Error at cmake/OpenCVUtils.cmake:895 (file):

file DOWNLOAD HASH mismatch

   

for file: [D:/Program Files (x86)/opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/opencv_ffmpeg.dll]

expected hash: [89c783eee1c47bfc733f08334ec2e31c]

actual hash: [3de6314883587d538b4864070e0a749d]

status: [28;"Timeout was reached"]

   

Call Stack (most recent call first):

3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)

cmake/OpenCVFindLibsVideo.cmake:206 (include)

CMakeLists.txt:536 (include)

   

CMake Error at cmake/OpenCVUtils.cmake:899 (message):

Failed to download opencv_ffmpeg.dll. Status=28;"Timeout was reached"

Call Stack (most recent call first):

3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)

cmake/OpenCVFindLibsVideo.cmake:206 (include)

CMakeLists.txt:536 (include)

   

繼續下載了一個opencv_ffmpeg.dll,替換至.../opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/下載鏈接:http://pan.baidu.com/s/1dEAnopN

然后開始Downloading ippicv_windows_20151201.zip,我知道肯定下載不了,繼續自己下載,http://pan.baidu.com/s/1c27hCT6

放到/opencv/sources/3rdparty/ippicv/downloads/windows-04e81ce5d0e329c3fbc606ae32cad44d/繼續configure。。。。。。如下圖,Configuring done

   

然后進行第二次Configure(配置),直接點擊Configure,幾秒鍾后,Configuring done

   

最后,單機Generate,成功生成項目,幾秒鍾完成,顯示Generating done。大功告成也!

CMake是自己設定build的路徑下,可以打開OpenCV.sln工程,按F5啟動調試,5分鍾編譯完成,

但提示如下錯誤:

   

原因是OpenCV的源代碼工程默認將"ALL_BUILD"這個項目設置為了啟動項,編譯后就會默認運行它。而"ALL_BUILD"是一個項目生成周邊的雜項,不是exe文件,本生不可以運行,所以自然就會彈出這樣的錯誤提示。若想讓此報錯的對話框不像是,指定一個另外的啟動項即可。我們在解決方案資源管理器里,對需要設置為啟動項的那個項目右鍵點擊,在彈出的菜單項中單擊【設為啟動項(J)】進行設定。如下圖:

總結解決辦法是:自己根據上述地址手動下載該文件,然后將編譯時下載的文件替換掉。根據上述代碼可知,如果該文件存在,就不會再去下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM