封装一个基于VS2015的C++制作的包含Opencv功能的dll,供其他VS项目使用

最近开始着手做上位机界面,开始将之前写好的c++项目打包DLL(动态链接库文件),以供其他的vs项目使用。已经经过验证,自己在打包的过程中出现了一些问题,此博客用来记录问题以及打包过程。
1、打开VS2015,点击:新建—》项目—》VC+±-》win32项目–》下一步-,选择DLL,将下面的对勾画上。
项目新建完成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、完成创建项目之后,自动生成一些文件。dllmain文件相当于之前常规项目的main函数,不需要管就可以。
将调试器选择成release(非常重要),X86或者X64根据自己安装的软件所决定,我的opencv安装的是X86所以我选择的是X86.
在这里插入图片描述
3、右击头文件新建一个.h文件,取名字为Dll.h,同理新建一个.cpp文件,取名为Dll.cpp,
在这里插入图片描述
4、头文件是作了一个概括,这个概括包括了定义的函数,而函数的具体实现,就在Dll.cpp中完成。

在Dll.h文件中写以下代码:

在这里插入代码片
#pragma once//防止重复编译文件报错

//这边需要配置openCV:网上有很多配置opencv的资源可以去参考
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

//函数声明
extern __declspec(dllexport)void ShowImage();

在.cpp文件中写函数的实现过程:

#include "stdafx.h"
#include <iostream>
#include "opencv2/opencv.hpp"
#include  "  Dll.h  "

using namespace std;
using namespace cv;

void ShowImage()
{
	//读取图片
	Mat src = imread("C:\\Users\\Administrator\\Desktop\\1.png");
	//显示图片
	imshow("图片",src);
}
```cpp
在这里插入代码片

写完之后会有opencv相关的函数等爆红线,这边的原因是没有配置opencv,网上资源很多,自行去查找如何在vs中配置opencv(包含目录、库目录、附加依赖项等配置博客上很多资料)。配置完成就没有这个问题了。
`在这里插入图片描述
``在这里插入图片描述

完成之后,右击项目点击生成。打开项目文件中的release文件夹发现生成了6个文件。
在这里插入图片描述
在这里插入图片描述
在我们完成DLL文件生成后,我们要把生成的dll文件应用到其他的项目中只需要CreatDLL.dll文件、CreatDLL.lib文件、DLL.h文件,给另一个工程使用。使用方法如下所示:
1、在这里插入图片描述
2、将将调试器选择成release(非常重要),X86或者X64根据自己安装的软件所决定,我的opencv安装的是X86所以我选择的是X86.
3、在新建项目的文件夹中,新建两个文件夹,一个名字叫include,吧DLL.h文件拷贝进去,新建一个lib文件夹,将CreatDLL.lib拷贝进去,将DLL.h和CreatDLL.lib的文件路径添加到引用目录和库目录之中,将CreatDLL.lib复制进去附加依赖项中
在这里插入图片描述
在新建的项目中的。cpp文件中写main函数调用函数即可。

在这里插入代码片
#include "stdafx.h"
#include "DLL.h"

int main()
{
	ShowImage();
    return 0;
}
右键生成,将CreatDLL.dll复制到新出现的release文件夹中。调试运行即可

```至此已经完成完成包含opencv功能的DLL的打包以及运用到别的项目。有问题随时交流呀。

`

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
首先,你需要安装 OpenCV 和 Visual Studio 2022。如果你已经安装了 OpenCV ,则可以跳过第一步。 1. 下载并安装 OpenCV - 前往 OpenCV 官方网站下载最新版的 OpenCV :https://opencv.org/releases/ - 解压下载得到的压缩包,将解压后的文件夹重命名为 "opencv",并将该文件夹移动到 C: 盘根目录下。 2. 创建一个 C++/CLI 项目 - 打开 Visual Studio 2022 并创建一个新的 C++/CLI 项目。 - 在解决方案资源管理器中,右键单击 "源文件",选择 "添加" -> "新项"。 - 在 "添加新项" 对话框中,选择 "C++ 文件 (.cpp)",并将其命名为 "OpenCvWrapper.cpp"。 3. 添加 OpenCV 文件 - 在解决方案资源管理器中,右键单击项目名称,选择 "属性"。 - 在 "属性页" 中,展开 "VC++ 目录",选择 "包含目录",并添加以下路径:C:\opencv\build\include - 展开 "链接器",选择 "常规",并在 "附加目录" 中添加以下路径:C:\opencv\build\x64\vc16\lib - 在 "输入" 中,添加以下附加依赖项: opencv_world452.lib opencv_world452d.lib 4. 编写代码 - 打开 "OpenCvWrapper.cpp" 文件,并添加以下代码: ```cpp #include "stdafx.h" #include "OpenCvWrapper.h" using namespace System; using namespace System::Drawing; using namespace System::Drawing::Imaging; // 将 System::Drawing::Bitmap 转换为 cv::Mat cv::Mat BitmapToMat(Bitmap^ bitmap) { // 获取位图数据 Rectangle rect = Rectangle(0, 0, bitmap->Width, bitmap->Height); BitmapData^ bmpData = bitmap->LockBits(rect, ImageLockMode::ReadWrite, bitmap->PixelFormat); // 创建 Mat 对象 cv::Mat mat(bitmap->Height, bitmap->Width, CV_8UC4, bmpData->Scan0); // 释放位图数据 bitmap->UnlockBits(bmpData); return mat; } // 将 cv::Mat 转换为 System::Drawing::Bitmap Bitmap^ MatToBitmap(cv::Mat& mat) { // 创建位图对象 Bitmap^ bitmap = gcnew Bitmap(mat.cols, mat.rows, mat.step, Imaging::PixelFormat::Format32bppArgb, IntPtr(mat.ptr())); return bitmap; } // 使用 OpenCV 对图像进行处理 void ProcessImage(Bitmap^ bitmap) { cv::Mat mat = BitmapToMat(bitmap); // 在这里添加 OpenCV 处理代码,例如: cv::cvtColor(mat, mat, cv::COLOR_BGR2GRAY); cv::GaussianBlur(mat, mat, cv::Size(5, 5), 0); bitmap = MatToBitmap(mat); } // 封装函数,外部调用 extern "C" __declspec(dllexport) void OpenCvProcessImage(System::IntPtr bitmapHandle) { Bitmap^ bitmap = Bitmap::FromHbitmap(bitmapHandle); ProcessImage(bitmap); // 释放 Bitmap 对象 bitmap->Dispose(); } ``` 5. 创建 Wrapper 类 - 右键单击项目名称,选择 "添加" -> "新项"。 - 在 "添加新项" 对话框中,选择 "C++ 文件 (.cpp)",并将其命名为 "OpenCvWrapper.cpp"。 - 在 "OpenCvWrapper.h" 文件中添加以下代码: ```cpp #pragma once namespace OpenCvWrapper { public ref class OpenCv { public: static void ProcessImage(System::IntPtr bitmapHandle); }; } ``` 6. 编译并生成 DLL - 在解决方案资源管理器中,右键单击项目名称,选择 "属性"。 - 在 "属性页" 中,展开 "常规",选择 "配置类型",并选择 "动态 (.dll)"。 - 在 "常规" 中,将 "字符集" 设置为 "Unicode"。 - 在 "链接器" 中,展开 "高级",并将 "入口点" 设置为 "OpenCvProcessImage"。 - 点击 "生成" -> "生成解决方案",生成 DLL 文件。 7. 使用 DLL - 将生成的 DLL 文件复制到你的项目文件夹下。 - 在你的项目中添加对 "OpenCvWrapper.h" 的引用。 - 调用 OpenCv::ProcessImage 方法,传入位图句柄,即可使用 OpenCV 对图像进行处理。 ```cpp // 使用 OpenCvWrapper.dll 对图像进行处理 #include "OpenCvWrapper.h" System::IntPtr hBitmap = bitmap->GetHbitmap(); OpenCvWrapper::OpenCv::ProcessImage(hBitmap); DeleteObject(hBitmap); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值