在沒有安裝OpenCV的電腦上,要運行基於OpenCV庫的程序,有兩種方法:一、動態鏈接:就是將OpenCv安裝目錄下的bin目錄下的*.dll文件與應用程序一起打包發布;二、靜態鏈接:就是將OpenCV庫源代碼先用cMake進行編譯,然後將opencv庫的源文件加到工程中一期編譯,也就是說最後生成的可執行文件可以單獨運行,不需要OpenCV的動態鏈接庫。
一、首先介紹第一種方法,動態鏈接,dll調用其中包括隱式調用和顯示調用
1 隱式調用一般需要:
聲明函數接口的.h文件——include文件夾裡的內容
鏈接動態庫的.lib文件——lib文件夾裡的內容以及Input->Additional Dependencies添加的XX.lib
動態鏈接庫.dll文件——bin文件夾的內容
這裡bin文件夾是在系統環境目錄裡的,所以執行代碼是exe文件可以找到。也可以添加在系統文件中,把需要用到的dll拷貝到exe同一個文件夾下即可。
所以,如果把未發布的工程拷貝到沒有opencv的電腦上,只要把需要用的函數相關的.h,.lib以及.dll文件考過去即可。
2 另一種調用dll的方式是顯示調用。
顯示調用是不需要.lib和.h文件的。是在代碼裡“顯示”加載要用到的函數。例如:
HINSTANCE hDLL=NULL;//生命DLL句柄
hDLL=LoadLibrary("opencv_core242d.dll"); //加載DLL
HMAT myImread=(HMAT)GetProcAddress(hDLL,"imread"); //使用DLL中的函數
這樣在拷貝工程時只拷貝用到的DLL文件就可以。
但這樣代碼寫得很麻煩,DLL換個名字版本之類的要改很多地方,一般用得不多。
如果只是給別人靜態鏈接的exe程序(比如一個demo,不用跑程序),那只要給別人dll文件就可以。
也就是將需要用到的dll文件拷到exe文件夾下即可,Release拷貝XX.dll,Debug版本拷貝XXd.dll
(所以我們寫Additional Dependencies不用到的盡量不寫,這樣拷的dll會少一些~)