pcl opencv 演算法生成dll並呼叫

2021-09-25 14:21:11 字數 1570 閱讀 2801

pcl 和opencv都是開源的演算法庫,在這兩個庫的基礎上開發的專案,下面需要開發介面gui,最好能封裝為dll,不同的演算法呼叫傳入傳出,呼叫次數完全根據gui程式設計的來

下面記錄一下摸索出的演算法封裝dll部分和呼叫兩部分,opencv和pcl兩個庫通用。

一、演算法封裝部分 pcl1.8.1 vs2015

新建專案-win32控制台應用程式,起名字和位置-確定-嚮導下一步-應用程式型別選dll-空專案不勾選,其他預設-完成

可以看到標頭檔案有兩個 stdafx.h targetver.h 原始檔dllmain.cpp stdafx.cpp和乙個自己起名的.cpp(為了方便後面叫這個cpp為oho.cpp)

1.開啟stdafx.h將自己演算法的標頭檔案巨集定義,命名空間等複製進去,

2.開啟oho.cpp,include標頭檔案為stdafx.h 以及必要的iostream string等標頭檔案,根據自己的情況來包含

3.全域性變數函式等全部複製到oho.cpp下 struct、class類似

4.現在oho.cpp應該都是演算法的乙個個函式,在stdafx.h裡宣告這些函式,主要宣告括號裡只要型別不要變數名,按照順序宣告即可。

5.在原始檔部分右鍵-新增-新建項-左邊選**-模組定義檔案(.def)名字不改

6.開啟source.def檔案

library"oho"

exports

//填入函式名 @1

//第二個函式名 @2 //注意@和函式名之間有空格

...

7.選單欄 專案-最後一項oho屬性頁 配置一遍pcl,什麼包含目錄庫目錄、附加依賴項之類的可以參考我這裡:

pcl1.8.1+vs2015+win7

8.c/c++預處理器定義新增兩個:

_scl_secure_no_warnings _crt_secure_no_warnings nominmax( 不然會報錯錯誤 c2589 「(」:「::」右邊的非法標記 )

9.生成-生成解決方案,

10.根據自己release還是debug版本在對應的目錄下去找oho.dll 和oho.lib

二、dll的呼叫部分

新建專案-空專案-起名字和路徑(為了方便後續叫usedll.cpp)

1.開啟usedll.cpp 將oho.dll放到此專案根路徑下

2.必要的標頭檔案不能缺,例如有的函式形參就包括pcl裡面的模板或者boost指標,那這部分的標頭檔案也要包括在usedll.cpp裡,這裡推薦直接把屬性管理器裡保持pcl配置部分的屬性表新增進去

3.全域性變數定義寫後面

4.根據封裝cpp裡函式的返回型別和函式的宣告順序

typedef int (*第乙個函式名)(string file1);

typedef void(*第二個函式名)(char *file2,const string file3);

typedef int(*第三個函式名)(pcl::pointcloud::ptr cloud);

... int main()

else{

std::cout<<"cannot find function"<5.除錯就可以了。

常用DL演算法

輸入引數 c 過程 適當選擇c個類的初始中心 在第k次迭代中,對任意乙個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類 利用均等方法更新該類的中心值 對於所有的c個聚類中心,如果利用 2,3 的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。該演算法是無監督的聚類演算法。過程 輸...

labview呼叫VS2015生成的DLL

是否可以從64位的labview中呼叫32位的dll。解答 不可以。因為在64位的作業系統中,32位的dll必須在乙個模擬的記憶體空間來處理,他們無法與64位labview中執行的vi共同存在,如果您嘗試在64位的labview中呼叫庫函式節點時選擇32位dll,會彈出乙個錯誤對話方塊說明。選擇的庫...

反編譯C 的dll檔案並修改,再重新生成dll

1 把dll檔案匯入到ildasm工具中,ildasm是由微軟提供的.net程式反編譯工具,位於 c program files microsoft sdks windows v6.0a bin 2 在ildasm中file dump,把dll檔案轉儲為 il檔案存到某個指定資料夾裡,得到 il和 ...