詳述C++調(diào)用opencv編譯成dll并調(diào)用的全過(guò)程-創(chuàng)新互聯(lián)

本篇詳述的是在Vs2019+OpenCV環(huán)境下生成動(dòng)態(tài)鏈接庫(kù)DLL并加以調(diào)用的全過(guò)程<1>生成動(dòng)態(tài)鏈接庫(kù): 1、Vs創(chuàng)建新項(xiàng)目 -->動(dòng)態(tài)鏈接庫(kù)(DLL)

成都創(chuàng)新互聯(lián)公司專注于英山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。英山網(wǎng)站建設(shè)公司,為英山等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)2、 下一步 -->(填寫自己的項(xiàng)目名稱,選擇自己的項(xiàng)目位置) 創(chuàng)建

3、頭文件--添加--新建項(xiàng)--.h文件--添加

4、編輯.h文件(例:我生成的 Test.h)

#pragma once
#include#include#include#include#includeusing namespace std;
using namespace cv;

extern "C" __declspec(dllexport) void thresholdIntegral(Mat inputMat, Mat outputMat);
其中,extern "C":告訴編譯器將被它修飾的代碼按C語(yǔ)言的方式進(jìn)行編譯。
?__declspec(dllexport):告訴編譯器和鏈接器被它修飾的函數(shù)或變量需要從DLL導(dǎo)出,以供其他應(yīng)用程序使用;與其相對(duì)的還有一句代碼是__declspec(dllimport),此修飾符的作用是告訴編譯器和鏈接器被它修飾的函數(shù)或變量需要從DLL導(dǎo)入,它在后面也會(huì)被用到。
?void thresholdIntegral(Mat inputMat, Mat outputMat):就是需要被其他程序調(diào)用的函數(shù)。?(此處解釋來(lái)源于博主「Aishen1024」的原創(chuàng)文章,原文鏈接:https://blog.csdn.net/qq_30139555/article/details/103621955) 5、源文件--添加--新建項(xiàng)--.cpp文件--添加

6、編輯.cpp文件(例:我生成的 Test.cpp) ? ? ? ? 記得一定要在最上面添加 #include "pch.h"

至此,DLL的代碼編寫完成。

7、編譯

顯示成功就可以了。上面的提示信息沒(méi)有關(guān)系,因?yàn)檫@個(gè)是dll,不是.exe應(yīng)用程序,本身就是無(wú)法被啟動(dòng)的。單擊確定,忽視即可。

<2>配置OpenCV:

上述操作之后,會(huì)發(fā)現(xiàn)關(guān)于opencv庫(kù)的頭都在報(bào)錯(cuò),配置好opencv就沒(méi)事了。

首先我一直使用的都是 debug x64的平臺(tái)

1、?項(xiàng)目--屬性 ?1)VC++目錄--包含目錄--編輯

將您下載的opencv路徑下的兩個(gè)路徑添加進(jìn)去: ????????D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include ????????D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include\opencv2 ? 點(diǎn)擊確定

2)VC++目錄--庫(kù)目錄--編輯

?將您下載的opencv路徑下的一個(gè)路徑添加進(jìn)去: ????????D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib ? ?點(diǎn)擊確定

3)鏈接器--輸入--附加依耐項(xiàng)--編輯 ? ?將您下載的opencv路徑下的opencv_worldxxxd.lib添加進(jìn)去,它的路徑就是您剛剛添加到庫(kù)目錄的路徑: ????????D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib ? 一路點(diǎn)擊確定

以上opencv就全部配置完成了。

<3>調(diào)用動(dòng)態(tài)鏈接庫(kù): 1、新建一個(gè)C++工程項(xiàng)目(例:DllTest),也需按<2>配置好opencv

2、調(diào)用DLL ? ? 1)將剛剛Dll1的生成工程目錄下的x64\Debug文件夾中的“Dll1.dll”和“Dll1.lib”文件復(fù)制到"DllTest\DllTest"文件夾中。

這個(gè)時(shí)候問(wèn)題來(lái)了,發(fā)現(xiàn)我們的生成的只有dll文件,卻缺少相對(duì)應(yīng)的lib文件,那么要解決一下這個(gè)問(wèn)題了。

PS:? 打開(kāi)之前的dll1.sln 在工程上右鍵 ->添加 ->新建項(xiàng) ->選"模塊定義文件(.def)" ->隨便輸入個(gè)名字 ->添加

添加完成后,直接編譯,再打開(kāi)文件夾,會(huì)發(fā)現(xiàn)有相對(duì)應(yīng)lib文件了 ? ? 2)將剛剛Dll1的生成工程目錄下的x64\Debug文件夾中的“Dll1.dll”和“Dll1.lib”文件復(fù)制到"DllTest\DllTest"文件夾中。

? 3)將剛剛Dll1的生成工程目錄下的Dll1\Dll1文件夾中的“Test.h”文件復(fù)制到"DllTest\DllTest"文件夾中。

? 4)對(duì)新建的C++工程(Adaptive),頭文件--添加--現(xiàn)有項(xiàng) 添加了Test.h之后。編輯Test.h文件
#pragma once
#pragma comment(lib,"Dll1.lib")
#include#include#include#include#includeusing namespace cv;

extern "C" __declspec(dllimport) void thresholdIntegral(Mat inputMat, Mat outputMat);
首先,添加一行代碼:#pragma comment(lib,"xxx.lib"),它的作用是將您的“xxx.dll”鏈接到您的工程項(xiàng)目中;
然后,extern "C" __declspec(dllexport) 修改為 extern "C" __declspec(dllimport) ,它的作用是告訴編譯器和鏈接器被__declspec(dllimport)修飾的函數(shù)或變量需要從DLL導(dǎo)入。 ? ? 5)編寫需調(diào)用dll的cpp文件即可

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:詳述C++調(diào)用opencv編譯成dll并調(diào)用的全過(guò)程-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://muchs.cn/article6/dheoog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、小程序開(kāi)發(fā)標(biāo)簽優(yōu)化、網(wǎng)站收錄、網(wǎng)站策劃、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化