详述C++ 调用opencv编译成dll并调用的全过程

这篇具有很好参考价值的文章主要介绍了详述C++ 调用opencv编译成dll并调用的全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇详述的是在Vs2019+OpenCV环境下生成动态链接库DLL并加以调用的全过程

<1> 生成动态链接库:

1、Vs创建新项目 --> 动态链接库(DLL)

详述C++ 调用opencv编译成dll并调用的全过程

2、 下一步 --> (填写自己的项目名称,选择自己的项目位置) 创建

详述C++ 调用opencv编译成dll并调用的全过程

3、头文件--添加--新建项--.h文件--添加

详述C++ 调用opencv编译成dll并调用的全过程

 4、编辑.h文件(例:我生成的 Test.h)

详述C++ 调用opencv编译成dll并调用的全过程

#pragma once
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <iostream>

using namespace std;
using namespace cv;

extern "C" __declspec(dllexport) void thresholdIntegral(Mat inputMat, Mat outputMat);

 其中,extern "C":告诉编译器将被它修饰的代码按C语言的方式进行编译。
            __declspec(dllexport):告诉编译器和链接器被它修饰的函数或变量需要从DLL导出,以供其他应用程序使用;与其相对的还有一句代码是__declspec(dllimport),此修饰符的作用是告诉编译器和链接器被它修饰的函数或变量需要从DLL导入,它在后面也会被用到。
           void thresholdIntegral(Mat inputMat, Mat outputMat):就是需要被其他程序调用的函数。 (此处解释来源于CSDN博主「Aishen1024」的原创文章,原文链接:https://blog.csdn.net/qq_30139555/article/details/103621955)

5、源文件--添加--新建项--.cpp文件--添加

详述C++ 调用opencv编译成dll并调用的全过程

 6、编辑.cpp文件(例:我生成的 Test.cpp)

        记得一定要在最上面添加 #include "pch.h"

详述C++ 调用opencv编译成dll并调用的全过程

 至此,DLL的代码编写完成。

7、编译

详述C++ 调用opencv编译成dll并调用的全过程

详述C++ 调用opencv编译成dll并调用的全过程

显示成功就可以了。上面的提示信息没有关系,因为这个是dll,不是.exe应用程序,本身就是无法被启动的。单击确定,忽视即可。

<2> 配置OpenCV:

上述操作之后,会发现关于opencv库的头都在报错,配置好opencv就没事了。

首先我一直使用的都是 debug x64的平台

详述C++ 调用opencv编译成dll并调用的全过程

1、 项目--属性

 1)VC++目录--包含目录--编辑

详述C++ 调用opencv编译成dll并调用的全过程

  将您下载的opencv路径下的两个路径添加进去:

        D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include

        D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include\opencv2

  点击确定

详述C++ 调用opencv编译成dll并调用的全过程

2)VC++目录--库目录--编辑

详述C++ 调用opencv编译成dll并调用的全过程

   将您下载的opencv路径下的一个路径添加进去:

        D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib

   点击确定

详述C++ 调用opencv编译成dll并调用的全过程

 3)链接器--输入--附加依耐项--编辑

   将您下载的opencv路径下的opencv_worldxxxd.lib添加进去,它的路径就是您刚刚添加到库目录的路径:

        D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib

  一路点击确定

详述C++ 调用opencv编译成dll并调用的全过程

详述C++ 调用opencv编译成dll并调用的全过程

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

<3> 调用动态链接库:

1、新建一个C++工程项目(例:DllTest),也需按<2>配置好opencv

详述C++ 调用opencv编译成dll并调用的全过程

 2、调用DLL

    1)将刚刚Dll1的生成工程目录下的x64\Debug文件夹中的“Dll1.dll”和“Dll1.lib”文件复制到"DllTest\DllTest"文件夹中。

详述C++ 调用opencv编译成dll并调用的全过程

这个时候问题来了,发现我们的生成的只有dll文件,却缺少相对应的lib文件,那么要解决一下这个问题了。

PS:  打开之前的dll1.sln

在工程上右键 -> 添加 -> 新建项 -> 选"模块定义文件(.def)" -> 随便输入个名字 -> 添加

详述C++ 调用opencv编译成dll并调用的全过程

详述C++ 调用opencv编译成dll并调用的全过程

 添加完成后,直接编译,再打开文件夹,会发现有相对应lib文件了

    2)将刚刚Dll1的生成工程目录下的x64\Debug文件夹中的“Dll1.dll”和“Dll1.lib”文件复制到"DllTest\DllTest"文件夹中。

详述C++ 调用opencv编译成dll并调用的全过程

    3)将刚刚Dll1的生成工程目录下的Dll1\Dll1文件夹中的“Test.h”文件复制到"DllTest\DllTest"文件夹中。

详述C++ 调用opencv编译成dll并调用的全过程

详述C++ 调用opencv编译成dll并调用的全过程文章来源地址https://www.toymoban.com/news/detail-440901.html

    4)对新建的C++工程(Adaptive),头文件--添加--现有项

添加了Test.h之后。编辑Test.h文件

#pragma once
#pragma comment(lib,"Dll1.lib")
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <iostream>

using namespace cv;

extern "C" __declspec(dllimport) void thresholdIntegral(Mat inputMat, Mat outputMat);

首先,添加一行代码:#pragma comment(lib,"xxx.lib"),它的作用是将您的“xxx.dll”链接到您的工程项目中;
然后,extern "C" __declspec(dllexport) 修改为 extern "C" __declspec(dllimport) ,它的作用是告诉编译器和链接器被__declspec(dllimport)修饰的函数或变量需要从DLL导入。

    5)编写需调用dll的cpp文件即可

到了这里,关于详述C++ 调用opencv编译成dll并调用的全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机学习笔记之二:APKtool工具实现反编译-编译-签名全过程

            APKTool 是一个开源的、跨平台的反编译、回编译 Android 应用程序的工具。它能够将 APK 文件解压并还原成 Android 应用程序的资源文件和 Smali 代码,还能将修改后的资源文件和 Smali 代码重新打包成 APK 文件。APKTool 是 Android 应用程序开发和逆向开发的重要工具之一,它能

    2024年02月02日
    浏览(61)
  • netCDF4.4安装全过程(intel编译器)

    ⚠️netcdf4.2以上的版本c库和fortran库分开,要先安装netcdf-c,然后再安装netcdf-fortran ⚠️安装netCDF前需要安装zlib和szip 安装完每个包后添加到环境变量: export PATH=xxx/bin:$PATH export LD_LIBRARY_PATH=xxx/lib:$LD_LIBRARY_PATH compiler:intel编译器 平台:centos7 其中可以使用 ./configure--help来查看可

    2024年02月06日
    浏览(31)
  • 车牌识别项目全过程——opencv知识自学(1)

    OpenCV(Open Source Computer Vision Library)是开源的计算机视觉和机器学习库,提供了C++、C以及python等接口,并支持Windows、Linux、Android、MacOS平台。 在2016年以后,深度学习的应用越来越广泛,OpenCV里也添加了CNN之类的模块,可以与Tensorflow、Caffe2这些框架训练出来的模型对接。 一张

    2024年02月05日
    浏览(30)
  • ESP32 官方AT固件编译(从零开始环境搭建到编译完成全过程)

    https://download3.vmware.com/software/WKST-PLAYER-1702/VMware-player-full-17.0.2-21581411.exe https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso 可能需要进电脑的BIOS打开一个选项才能安装成功虚拟机 5.1 GIT 克隆 git clone --recursive https://github.com/espressif/esp-at.git 如果没有安装git,按照控制台的提示安

    2024年02月15日
    浏览(26)
  • OpenWRT LEDE在Ubuntu22.04 编译全过程记录

    注, feeds用法 查看更新的订阅源信息,index file feeds/packages.index 【问题1】m4 编译错误 解决,参考博文 【问题2】 freadahead 异常 解决,参考博文 注意 : 参考博文中的 _IO_IN_BAXKUP 应该为 _IO_IN_BACKUP ,否则会导致下述报错,此文为正确写法 【问题3】 bison-3.0.4 相关错误 解决,参考

    2024年02月12日
    浏览(93)
  • Android.bp 构建 FFmpeg 库:从搭建编译框架到处理编译错误的全过程

    本文基于 FFmpeg 5.1.4 版本,详细讲述了使用 Android.bp 构建 FFmpeg 库的过程,旨在简化 Android 源码中 FFmpeg 库的构建以及集成过程。 构建过程需使用 NDK 工具辅助,请参考该专栏之前文章:使用 NDK 编译 FFmpeg github 仓库:FFmpegDroidBuilder 以编译 libavutil、libavcodec、libavformat、libswres

    2024年03月18日
    浏览(36)
  • openssl3.0.0源码编译全过程(Visual Studio2017)

    1、下载openssl3.0.0源码 2、Perl工具  点击下载 3、Visual Studio 2017 1、启动Visual Studio 2017的64位命令行工具,并切换至openssl3.0.0的源码目录  2、配置生成makefile文件 3、成功生成makefile     4、修改makefile文件  黄色标记处将: /O2 修改为 /Od ,并注意去除 /debug 项,否则生成的Release版

    2024年02月14日
    浏览(36)
  • 使用GraalVM native-image 编译SpringBoot3全过程

    本文记录了使用native-image编译SpringBoot3.0.3的过程及遇到的问题。其中一些问题也是网上很多朋友遇到,我在实际操作的过程也遇到过同样的问题,在此做一记录。 目录 一、编译环境准备 1.1 安装GraalVM 1.2 安装native-image 1.3 IDE设置 1.4 Visual Studio 2022 1.5 pom.xml文件 二、使用nati

    2024年02月11日
    浏览(33)
  • ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析)

    在之前的文章介绍过使用ArcMap发布GP分析服务,由于ArcGIS后续不在更新ArcMap,改用ArcGIS Pro,本文对ArcGIS Pro发布GP分析服务进行说明。 本文以等高线分析为例,使用ArcGIS Pro软件,从GP分析服务的创建、发布、调用全过程进行演示。 使用ArcMap发布GP服务请跳转:ArcGIS Desktop(Arc

    2024年02月02日
    浏览(30)
  • ArcGIS Desktop(ArcMap)创建、发布、调用GP服务全过程示例(等高线分析)

    本文以等高线分析为例,使用ArcMap软件,从GP分析服务的创建、发布、调用全过程进行演示。 使用ArcGIS Pro发布GP服务请跳转:ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析) 本文示例使用软件: ArcGIS Desktop10.3.1 ArcGIS JS API4.16 注:阅读本文前需要对ArcGIS GP服务,模

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包