c++ 編譯OpenCV-3.3.0過程及遇到的問題
工作電腦之前用的是vs2013,這是在自己電腦上由於使用比較少,vs下載安裝包太大,平時用eclipse與idea用得也比較習慣,所以就有了這篇文章
平臺:
windows 7 x64
opencv 3.3.0
cmake x64
mingw x64
opencv整合eclipse 安裝CDT外掛支援c++(vscode整合會寫在下一篇)
分為四個步驟: 下載檔案與安裝cmake, 再通過cmake生成專案,mingw-make命令編譯opencv原始檔,mingw-install安裝編譯後的專案
1. 準備工作
下載openCV,開啟官網https://opencv.org/releases.html
這裡下載完成後是exe檔案,而不是下載原始碼
下載完成後的檔案:
開啟exe檔案解壓到指定目錄:
安裝CMake
安裝完成後開啟初始介面
安裝mingw ,這裡注意如果系統64位的話,建議安裝64位的,在編譯過程報錯,我最開始下載是32位的,編譯的時候直接報錯了
error: 'thread'in namespace 'std' does not name a type
報是這個報錯,google了半天說是重新安裝就好了
安裝完成cmd看下是否安裝成功
2. 開始編譯
在x64目錄下新建一個mingw路徑,存入編譯完成的檔案,我放的是D盤下D:\opencv\build\x64\mingw
下一步重要,我在編譯到47%就報了這個錯,然後又要重頭開始,浪費了好多時間
完成算下來應該是用了一個半小時,包括出錯重頭開始….
報錯---
sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA錯誤
...opencv/sources/modules/videoio/src/cap_dshow.cpp...
...'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared inthis scope ...
解決方式:
在cap_dshow.cpp(目錄在上面) 新增一行:#define NO_DSHOW_STRSAFE
如:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#defineNO_DSHOW_STRSAFE
#include "DShow.h"
下一步配置cmake的source 和build就是剛開始解壓的路徑,這裡是D:/opencv/sources,D:/opencv/build/x64/mingw(就是剛才新建的目錄)
點選configrure 再點選generate,
如果以編譯過程中報錯如下:
報錯----
... windres.exe:unknown option – W
在生成之前的把headers這裡勾去掉就可以了編譯過去了
生成之後開啟D:/opencv/build/x64/mingw,開啟cmd命令列視窗輸入:mingw32-make等待到100%即可,如有出錯按上面提示修正.再接著編譯…
最後看到這個,表示已經編譯完成可以使用了
3.編譯完成之後,再通過 mingw-make install 安裝編譯後的工程。。。。
4. 最後開啟eclipse,新建一個c++專案(前提是已經安裝eclipse的CDT外掛)
在專案屬性,c++build=>setting 下面
最後是顯示結果
int main(int arg,char** args) {
Mat src,dst;
string img ="c:\\users\\administrator\\downloads\\t1img.jpg";
src = imread(img);//圖片地址
if(!src.data){//data是判斷圖片是存在
printf("%s\n", "圖片不存在");
return -1;
}
//顯示圖片
namedWindow("inputimage",CV_WINDOW_AUTOSIZE);
imshow("inputimage",src);
waitKey(0);
cout << "HelloWorld" << endl; //prints Hello World
return 0;
}