个人总结详细版的C++调用Opencv和Halcon封装dll

一、前言:
在C++调用opencv和Halcon封装的过程中踩过很多坑,然而网上却查不到清晰地教程。在此个人总结详细教程,以免后人踩坑。记录下,以后自己忘了也可以来看看。
二、教程细节
2.1 我使用的IDE是vs2017,下面所有的介绍也都是以此IDE为基础。
第一步:选择C++动态链接库DLL
个人总结详细版的C++调用Opencv和Halcon封装dll_第1张图片
第二步:根据自己需要更改解决方案平台,我的是X64。下图中位置2是系统自己生成的。
个人总结详细版的C++调用Opencv和Halcon封装dll_第2张图片
第三步:把需要用到的核心库放在代码文件夹下,方便后续调用。也可以不放,不过这样就需要引用opencv或者halcon的安装目录。
个人总结详细版的C++调用Opencv和Halcon封装dll_第3张图片
第四步:配置Opencv和Halcon环境,主要配置两个地方。VC++的包含目录和库目录,链接器输入的附加依赖项。
个人总结详细版的C++调用Opencv和Halcon封装dll_第4张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第5张图片
第五步:创建并编辑算法函数类和接口函数类。也可以只用一个类里面既包含算法函数又包含对应的接口。我个人习惯分开。下图1是接口类,下图2是算法函数类。
个人总结详细版的C++调用Opencv和Halcon封装dll_第6张图片
第六步:编辑函数和接口,接口函数格式如下:
6.1 extern “C” _declspec (dllexport) int myAddFunction_interface(int a, int b);
6.2 DllEntry.h需要引用Function.h,才能调用Function.h里面的函数。
6.3 Function.h 需要
#include
#include
#include “opencv.hpp”
#include
#include
#include
#include
#include
using namespace std;
using namespace HalconCpp;
using namespace cv;
才能调用Halcon和Opencv的算子。
6.4 DllEntry.h需要引用
#include
#include
using namespace std;
using namespace HalconCpp;
才可以封装这种函数,参数类型是Hobject类型的函数。可以在QT调用的时候直接传Hobject,不用像传统的封装函数需要传递图像指针。这样,利用Halcon做图像处理时更方便。
个人总结详细版的C++调用Opencv和Halcon封装dll_第7张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第8张图片

第七步:到这里,算法封装步骤基本结束。下面开始创建QT程序。QT程序创建过程简单,不做介绍。直接讲如何调用刚才封装好的Dll。
7.1 把封装好的DllForQt.dll和DllForQt.lib还有接口类的头文件DllEntry.h放入QT程序的exe执行目录下。然后配置QT程序的项目属性,主要是配置两个地方,C/C++常规附加包含目录,链接器常规附加库目录,链接器输入附加依赖项。前面的两个目录都是DLL和Lib所在的目录,其实就是QT程序的exe执行目录。链接器输入附加依赖项里面输入DllForQt.lib。如果想封装并且传递结构体参数,但是结构体是在Function.h 里面声明的。还应该把头文件Function.h 放入QT程序的exe执行目录下。并且在QT中引用这两个头文件。步骤图片如下。
个人总结详细版的C++调用Opencv和Halcon封装dll_第9张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第10张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第11张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第12张图片

个人总结详细版的C++调用Opencv和Halcon封装dll_第13张图片
个人总结详细版的C++调用Opencv和Halcon封装dll_第14张图片

你可能感兴趣的:(opencv,c++,人工智能)