手把手練習--cmake+VS2015編譯OpenCV3.3原始碼(x86版本)

Captain_zp發表於2017-09-21

1:首先下載OpenCV3.3.0的原始碼:



2:解壓原始碼包opencv-3.3.0.zip,【點選"解壓當前資料夾"】:,為了以下方便說明,這裡以F:\opencv-3.3.0為例:


檢視原始碼包,在資料夾下3rdparty【就是需要的第三方的庫】,但是第三方庫 ffmpeg 和 ippicv是空的,

在用cmake配置編譯時,有些需要聯網下載,並儲存在源但是往往會下載很慢,所以可以提前下載好,放進對應的資料夾即可,這個對應的資料夾是原始碼資料夾下的.cache資料夾,需要新建,即在F:\opencv-3.3.0下新建.cache資料夾,注意不要滑鼠右鍵新建資料夾,建立不了字首名是"."的資料夾,需要用命令列,> md .cache


即可新建。


然後在.cache資料夾下,新建ffmpeg和ippicv資料夾。以下詳細介紹下載動態庫。


3:下載對應的ffmpeg的動態庫:

開啟資料夾ffmpeg下的ffmpeg.cmake檔案,會看到有一個第一行,我們需要下載master_20170704


開啟https://github.com/opencv/opencv_3rdparty/branches/all,找到對應的名字:


然後下載,解壓後,將以下三個檔案複製到F:\OpenCV-3.3.0/.cache/ffmpeg資料夾下:


同時將這三個複製到原始碼的資料夾F:\opencv-3.3.0\3rdparty\ffmpeg下,只是為了後期配置編譯的更快。

4:下載ippicv

與上述步驟類似,開啟\opencv-3.3.0\3rdparty\ippicv\ippicv.cmake檔案:


需要下載字尾是20170418的包,解壓後,會看到看到幾個不同平臺下的壓縮包:

比如這裡需要編譯x86版本的,將ippicv_2017u2_win_ia32_20170418.zip複製到到F:\opencv-3.3.0\.cache\ippicv資料夾下,然後注意要重新命名,加上改.zip的hash碼,那麼怎麼檢視該.zip的hash碼呢?同樣開啟\opencv-3.3.0\3rdparty\ippicv\ippicv.cmake檔案,


ippicv_2017u2_win_ia32_20170418.zip的檔名字,改為以下,即在前面加上它對應的HASH碼:


這樣點.cache資料夾下的兩個資料夾都已經完成了。


5:電腦上需要安裝Python3.X否則會有以下提示:

再編譯過程需要python3.X版本

6:開啟cmake


即以以下為例:


為了快速編譯將原始碼包中的資料夾3rdparty整個複製到F:\OpenCV3.3Build資料夾下,
然後點選“Configure”按鈕:

等一兩分鐘後,等待配置完成:


然後再點選"Configure"按鈕


點選“Generate”,


可以關閉'CMake"。

7:開啟編譯後的資料夾F:\OpenCV3.3Build


開啟OpenCV.sln,然後點選Build Solution:

需要等待幾分鐘:

最後會出現以下介面

,這個時候x86版的Debug版本已經編譯成功,生成的動態庫、共享庫、可執行檔案在資料夾F:\OpenCV3.3Build\bin\Debug下

開啟該資料夾檢視生成的動態庫


第8步:點選"INSTALL"->Project Only Build Only INSTALL


然後在F:\OpenCV3.3Build下自動生成一個install資料夾,資料夾下儲存了OpenCV的標頭檔案和x86 Debug模式下的
動態庫和共享庫

開啟x86資料夾,

開啟vc14資料夾

lib資料夾:

可以看到有一個是opencv_dnn330d.lib即深度學習的共享庫

9:編譯x86的release版本

點選Build->Build Solution,通以上編譯Debug版本類似,需要等待幾分鐘,。


然後,這時檢視F:\OpenCV3.3Build\bin下的Release資料夾下已經生成好動態庫

同樣點選:

等幾秒鐘

然後檢視F:\OpenCV3.3Build\install\x86\vc14\lib多了一些檔名不帶"d"的共性庫檔案

10:測試使用
#include<iostream>
#include<string>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc,char*argv[])
{
	Mat img = cv::imread(argv[1], cv::IMREAD_COLOR);
	imshow("as", img);
	waitKey(0);
	return 0;
}

親測可用
11:為了方便將其提交到http://download.csdn.net/download/wxcdzhangping/9990091,可下載使用

相關文章