opencv4.10封装dll
时间: 2025-01-08 21:41:17 浏览: 43
如何将 OpenCV 4.10 封装为 DLL 文件
准备工作
为了成功创建基于 OpenCV 的动态链接库 (DLL),需要先安装配置好 Visual Studio 和 CMake 工具环境。确保已下载并解压了 OpenCV 源码包,版本应匹配指定的 4.10 版本。
配置项目结构
建立一个新的 Windows 动态链接库(DLL)工程,在解决方案资源管理器里右键点击项目名称->属性->C/C++ ->常规->附加包含目录中加入 OpenCV 头文件路径;同样地,在连接器->常规->附加库目录下添加 lib 路径[^1]。
编写导出函数定义头文件
创建一个 .h 文件用于声明要暴露给外部使用的接口:
#pragma once
#ifdef MYOPENCVLIBRARY_EXPORTS
#define MYOPENCVDLL_API __declspec(dllexport)
#else
#define MYOPENCVDLL_API __declspec(dllimport)
#endif
extern "C" {
MYOPENCVDLL_API void* CreateImage(int width, int height);
MYOPENCVDLL_API void DestroyImage(void *imgPtr);
}
此部分代码实现了简单的图像对象创建销毁功能接口声明。
实现对应的 cpp 文件中的逻辑处理
接着实现上述两个方法的具体操作过程,这里简化示意如下:
#include "opencv2/opencv.hpp"
using namespace cv;
class ImageWrapper {
public:
Mat img;
};
extern "C" {
MYOPENCVDLL_API void* CreateImage(int width, int height){
try{
auto wrapper = new ImageWrapper();
wrapper->img.create(height,width,CV_8UC3); // 注意参数顺序是height first.
return static_cast<void*>(wrapper);
}catch(...){
return nullptr;
}
}
MYOPENCVDLL_API void DestroyImage(void *imgPtr){
if(imgPtr!=nullptr){
delete reinterpret_cast<ImageWrapper*>(imgPtr);
}
}
}
这段程序片段展示了如何利用 cv::Mat
类型来存储图像数据,并通过自定义类包裹起来以便于跨语言边界传递。
使用 CMakeLists.txt 构建系统描述构建流程
最后一步是在项目的根目录放置一份名为 CMakeLists.txt 的文本文件,内容大致如下所示:
cmake_minimum_required(VERSION 3.17)
project(MyOpenCVLibrary VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
find_package(OpenCV REQUIRED)
add_library(${PROJECT_NAME} SHARED src/my_opencv_functions.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
install(FILES include/*.h DESTINATION include/${PROJECT_NAME})
这份脚本指定了编译选项以及依赖关系,其中包含了寻找本地安装好的 OpenCV 库的位置信息,并将其关联到当前正在开发的目标上。
完成以上步骤之后就可以借助 cmake 命令行工具或者图形界面来进行最终产物——即目标平台上的 dll 文件的实际生成动作了。
相关推荐
















