前言
創建DLL有幾種不同的方式,最簡單直接的的方式就是通過VS自帶的動態鏈接庫(DLL)項目,把相關的功能封裝成一個類,然后導出幾個接口方法,編譯成功以后生成DLL文件,就可以在其他地方跟正常的第三方庫配置之后一樣調用了。
01創建DLL
首先打開VS創建一個DLL空項目,打開VS的桌面向導如下:
創建DLL鏈接庫項目
然后在頭文件中添加mytest.h文件,添加代碼如下:
#pragmaonce #ifdef_DLL_EXPORTS #defineDLL_API_declspec(dllexport) #else #defineDLL_API_declspec(dllimport) #endif #include然后在源文件中添加mytest.cpp文件,添加代碼如下://=========導出函數C++調用接口============ classDLL_APIMyTestDLL{ public: intaddData(inta,intb); ~MyTestDLL(); };
#define_DLL_EXPORTS #includeMyTestDLL::~MyTestDLL(){ std::cout<"destory?instance?done!"?< 編譯運行成功,顯示如下:
02DLL測試程序
創建測試程序,來測試DLL。新建一個控制臺空項目,在源文件中添加main.cpp文件,然后添加如下代碼:
#include"opencv2/opencv.hpp" #include"mytest.h" intmain(intargc,char**argv){ std::cout<"test?mydll..."?<mydll(newMyTestDLL()); intsum=mydll->addData(3,5); std::cout<"DLL?invoke?result?:?"?< 運行結果如下:
YOLOv8對象檢測DLL測試
采用相同的方法,基于ONNXRUNTIME深度學習模型庫框架, 我對以前ONNXRUNTIME + YOLOv8對象檢測C++代碼稍作修改,封裝了一個YOLOv8對象檢測推理類為DLL,支持C++與C#接口調用。客戶端調用代碼如下:
#include"yolov8_infer.h" #include#include std::stringlabel_map="D:/python/yolov5-7.0/classes.txt"; intmain(intargc,char**argv){ std::stringnames="10:bike"; intpos=names.find_first_of(":"); std::cout<>"<classNames; std::ifstreamfp(label_map); std::stringname; while(!fp.eof()){ getline(fp,name); if(name.length()){ classNames.push_back(name); } } fp.close(); //std::shared_ptr detector(newYOLOv5ORTDetector()); std::shared_ptr detector(newYOLOv8ORTDetector()); detector->initConfig("D:/python/my_yolov8_train_demo/yolov8n.onnx",640,640,0.25f,0.5); cv::VideoCapturecapture("D:/images/video/sample.mp4"); cv::Matframe; std::vector results; while(true){ boolret=capture.read(frame); if(frame.empty()){ break; } int64start=cv::getTickCount(); detector->detect(frame,results); floatfps=static_cast (cv::getTickFrequency())/(cv::getTickCount()-start); cv::putText(frame,cv::format("FPS:%.2f",fps),cv::Point(50,50),cv::FONT_HERSHEY_SIMPLEX,1.0,cv::Scalar(255,0,255),2,8); for(DetectResultdr:results){ cv::Rectbox=dr.box; cv::putText(frame,classNames[dr.classId],cv::Point(box.tl().x,box.tl().y-10),cv::FONT_HERSHEY_SIMPLEX,.5,cv::Scalar(0,0,0)); } cv::imshow("YOLOv8+ONNXRUNTIME-DLL導出演示",frame); charc=cv::waitKey(1); if(c==27){//ESC退出 break; } //resetfornextframe results.clear(); } return0; } 審核編輯:湯梓紅
-
dll
+關注
關注
0文章
114瀏覽量
45266 -
接口
+關注
關注
33文章
8257瀏覽量
149976 -
封裝
+關注
關注
125文章
7593瀏覽量
142149 -
C++
+關注
關注
21文章
2085瀏覽量
73304 -
動態鏈接庫
+關注
關注
0文章
10瀏覽量
7059
原文標題:手把手教你 封裝DLL類 給客戶端調用
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論