平台:win10 x64 +VS 2015專業版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32
差別:VS2015,opencv2.4.11, gtk_-bundle_2.24.10_win32版本不同,稍有差别
一、OPENSIFT編譯運作
差別:Visual Studio 2015專業版的項目中稍作改動并編譯通過。
1.1 VS 2015專業版配置VS項目
VS 2015專業版 +opencv-2.4.11下載下傳及安裝見我的另一篇部落格
那篇部落格安裝的是opencv-3.4.1-vc14_vc15 ,而本平台需要安裝opencv-2.4.11 (那篇部落格附有雲盤下載下傳連結),安裝方法雷同,
注意:添加環境變量哦
首先解壓OPENSIFT.zip ->裡邊有(“說明.txt”—說明了目錄下各個檔案,“SIFT程式vs”—為VS2012項目版本,對源碼進行部分修改注釋,“robwhess-opensift-300bad1.zip”—
從http://robwhess.github.io/opensift/下載下傳的OpenSIFT源碼)->将“SIFT程式vs”檔案夾重命名為“SIFT”,然後拷貝到VS的工程檔案夾下(我的是:“D:\Working\VS2015Projects”檔案夾下)
->進入SIFT檔案夾後用VS2015打開SIFT.vcxproj -> 預設模闆解決方案平台選擇是:Debug和解決方案配置選擇是:Win32,
這時直接點選本地Windows調試器會有一大堆錯誤,還需要進行下面的配置。
1.2 OpenCV配置
下載下傳連結:https://pan.baidu.com/s/12_DTxM265ZYmg5EBeacjNQ
下載下傳後為:opencv-2.4.11.exe
安裝:輕按兩下該可執行檔案後更改路徑(我的是:D:\ProgramFiles\opencv2)後點選“Extract”即可完成安裝
配置:1.添加環境變量(我的為:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin)
注意入坑1:環境變量要配置為x86的,而不能是x64的,這和vs2015平台選擇的win32統一
2.VS2015中opencv的配置:在SIFT處單擊滑鼠右鍵,在彈出的快捷菜單中選擇“屬性”選項,進入SIFT的屬性頁
->(預設)配置處選擇:Debug,平台選擇:活動(Win32)
在“配置屬性”點選“VC++目錄“->“包含目錄”點選編輯->在“包含目錄”的對話框中将OpenCV的頭檔案路徑(一共三個,在build檔案夾下)添加進去->點選“确定“
D:\ProgramFiles\opencv2\opencv\build\include 2.D:\ProgramFiles\opencv2\opencv\build\include\opencv 3.D:\ProgramFiles\opencv2\opencv\build\include\opencv2
庫目錄”點選編輯->在“庫目錄”的對話框中将靜态連結庫路徑(在\build\x64或者x86檔案夾所在的路徑,這和vs2015平台選擇的win32統一,選擇x86)
我的是:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\lib添加進去->點選“确定“
在“配置屬性”點選“連結器“->點選“輸入”->-> 在“附加依賴項”點選編輯->把lib庫的名稱(lib庫檔案在\build\x86\vc14\lib下)添加進去->點選“确定“->點選“确定“
Debug配置下:
opencv_calib3d2411d.lib;opencv_contrib2411d.lib;opencv_core2411d.lib;opencv_features2d2411d.lib;opencv_flann2411d.lib;opencv_gpu2411d.lib;
opencv_highgui2411d.lib;opencv_imgproc2411d.lib;opencv_legacy2411d.lib;opencv_ml2411d.lib;opencv_objdetect2411d.lib;opencv_ts2411d.lib;opencv_video2411d.lib;
Release配置下(先不用配置):
opencv_contrib2411.lib;opencv_core2411.lib;opencv_features2d2411.lib;opencv_flann2411.lib;opencv_gpu2411.lib;opencv_highgui2411.lib;opencv_imgproc2411.lib;
opencv_legacy2411.lib;opencv_ml2411.lib;opencv_objdetect2411.lib;opencv_ts2411.lib;opencv_video2411.lib;
注意入坑2:本平台需要安裝opencv 2.x ,不能安裝opencv 3.x,因為依賴庫有問題,opencv3.x內建為一個了
注意入坑3:系統環境變量opencv隻能配置一個(我的為:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin),如果有opencv3.x或者opencv 2.x的x64的都會在VS中運作出錯
如D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin和D:\ProgramFiles\opencv2\opencv\build\x64\vc12\bin就會報錯:應用程式無法啟動0xc000007b
1.3 GTK+配置
下載下傳:http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/
我下載下傳了2.24.10版本,下載下傳後檔案為:gtk_-bundle_2.24.10-20120208_win32.zip
注意入坑4:官網下載下傳:https://www.gtk.org/download/windows.php, 沒有All-in-one bundle 版本,而要求下載下傳msys2-x86_64-20180531.exe
主要用于 shell 指令行開發環境。同時它也是一個在Cygwin (POSIX 相容性層) 和
MinGW-w64(從”MinGW-生成”)基礎上産生的,追求更好的互操作性的 Windows 軟體。
解壓至->->D:\ProgramFiles,并将檔案夾重命名為:gtk_-bundle_2.24.10_win32 (簡潔點,友善添加環境變量和庫)
配置:1.添加環境變量(我的為:D:\ProgramFiles\gtk_-bundle_2.24.10_win32\bin)
->->按說明驗證,Win+R輸入cmd運作,在cmd中輸入“pkg-config --cflags gtk+-2.0” ,會有一些輸出,輸入 “gtk-demo” ,會出現一個示例,示範GTK+的一些功能控件。
->->接下來就跟OpenCV一樣,要在VS2012的項目中進行一番配置了。在CMD中輸入運作“pkg-config --cflags --libs gtk+-2.0”,可以看到需要包含的目錄和連結庫。
pkg-config --cflags --libs gtk+-2.0 > D:\ProgramFiles\gtk_-bundle_2.24.10_win32\gtk.txt”,打開D:\ProgramFiles\gtk_-bundle_2.24.10_win32\gtk.txt,
内容如下:-mms-bitfields -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0
-ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/gtk-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/atk-1.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/cairo -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gdk-pixbuf-2.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/pango-1.0 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/glib-2.0 -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/glib-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include -I
D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/freetype2 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/libpng14
-LD:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -l
pangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl
然後根據這個來添加配置。在VS項目屬性的“VC++目錄”->“包含目錄”中添加/GTK/include/gtk-2.0 到 /GTK/include/libpng14的這些路徑,注意要用帶盤符的完整路徑,那個-mms-bitfields不用管它。
-L後面的D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib要添加在“庫目錄”中。
再後面的-l是連結庫的名字,把這一串”gtk-win32-2.0.lib;gdk-win32-2.0.lib;atk-1.0.lib;gio-2.0.lib;pangowin32-1.0.lib;gdi32.lib;pangocairo-1.0.lib;gdk_pixbuf-2.0.lib;
pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;gthread-2.0.lib;glib-2.0.lib;intl.lib;”添加進配置屬性->連結器->輸入->”附加依賴項“ 中就行了。
注意入坑5:報錯gdk_screen_get_width被display_big_img調用,原因:直接複制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0錯誤,因為裡邊是“/”,而win系統下路徑是"\"
是以,“包含目錄”“庫目錄”下的路徑都是"\"
注意入坑6:隻能下載下傳為win32的,而不能是win64的,這和vs2015平台選擇的win32統一
GTK+ win64的下載下傳連結http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/
注意入坑7:報錯找不到gdk.h或gtk.h>,原因:直接複制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0錯誤,因為裡邊是“/”,而win系統下路徑是"\"
“包含目錄”“庫目錄”下的路徑都是"\",
而和utils.c下#include <gdk/gdk.h>和#include <gtk/gtk.h>無關,改成#include <gtk-2.0/gdk/gdk.h>和#include <gtk-2.0/gtk/gtk.h>錯誤依舊
1.4代碼修改
報錯:“M_PI”未聲明:發生在imgfeatures.c中。
解決方案:在imgfeatures.h中加入 #define M_PI 3.14159265358979323846
報錯:無法找到頭檔案dirent.h。
解決方案:在網上百度搜尋:dirent.h - dirent API for Microsoft Visual Studio,然後下載下傳檔案,我是在碼雲上下載下傳的(連結:https://gitee.com/lomox/beanstalkd-win/blob/master/dirent.h,
解壓後進入檔案夾拷貝dirent.h),放在include檔案夾(我的是:D:\Working\VS2015Projects\SIFT\include)下
報錯:無法啟動應用程式,因為計算機中丢失msvcp120d.dll,關閉sift.exe後傳回值為 -1073741515 (0xc0000135) '未找到依賴 dll'。
原因:微軟的Visual Studio最終使用者許可協定是禁止釋出調試版(名字後面有D)的DLL的,msvcp120d.dll和msvcr120d.dll是VS2013版本中的調試庫檔案,存在于路徑:
“\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT”中,VS2015版中隻有msvcp140d.dll和msvcr140d.dll,但是OpenCV2.4.xx用的庫版本最高為VC12,
該庫并沒有更新VC14,我們需要用到VS2013的調試庫檔案,是以會造成msvcp120d.dll和msvcr120d.dll的缺失。
解決方案:網上的方法是下載下傳msvcp120d.dll和msvcr120d.dll到系統路徑:C:\Windows\System32或C:\Windows\SysWOW64。但是我認為這樣做不可取,随意添加到系統路徑中容易與
其他軟體的安裝發生沖突。我們可以将其放到OpenCV庫路徑中:“\OpenCV\opencv\build\x86\vc12\bin”。這樣當我們不使用opencv時也不會調用這兩個庫檔案,比較安全。 下載下傳連結:連結:https://pan.baidu.com/s/1nvN3atF
我下載下傳的為:msvcp120d%E7%AD%89.rar,解壓後拷貝至“\opencv\build\x86\vc12\bin”目錄(我的是:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin)下 ,重新運作本地windows調試器