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

news2025/7/10 10:17:13

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

第七步:到这里,算法封装步骤基本结束。下面开始创建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中引用这两个头文件。步骤图片如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解操作系统(Linux)

操作系统是一款对软硬件资源进行管理的软件&#xff01; 操作系统为什么要对软硬件资源进行管理呢&#xff1f; 操作系统通过合理的管理软硬件资源的手段&#xff0c;为用户提供良好的&#xff08;稳定的、高效的、安全的&#xff09;执行环境。 操作系统是如何进行管理的呢…

机器学习100天(十七):017 逻辑回归梯度下降

机器学习 100 天,今天讲的是:逻辑回归-梯度下降! 在讲解了逻辑回归的基本原理和损失函数之后,我们来推导逻辑回归模型中参数 w 和 b 的梯度表达式。 我们之前介绍过,计算逻辑回归的代价函数实际上包含了下面三个过程: Z = W T X + b Z=W^TX+b Z=

ASOC系统简析

一 嵌入式音频系统介绍 上图是音频系统的硬件模拟图&#xff0c;声卡通过I2S接口与cpu进行音频数据传输&#xff0c;通过I2C接口与cpu进行控制通讯。 录音数据通路&#xff1a;麦克风---->声卡------I2S------>DMA---->内存&#xff1b; 播放数据通路&#xff1a;内存…

HaaS EDU物联网项目实战:野外救援项目

HaaS EDU K1是一款高颜值、高性能、高集成度的物联网开发板&#xff0c;板载功能强大的4核&#xff08;双核300Mhz M33双核1GHz A7&#xff09;主芯片&#xff0c;2.4G/5G双频Wi-Fi&#xff0c;双模蓝牙&#xff08;经典蓝牙/BLE&#xff09;&#xff0c;并自带丰富的传感器与小…

Exception in thread “main“ java.lang.NoClassDefFoundError

项目场景&#xff1a; 验证继承情况下子类创建对象时&#xff0c;先调用父类的构造方法&#xff0c;再调用子类的构造方法 问题描述 随机&#xff08;不同次数的测试下&#xff09;会产生Exception in thread "main" java.lang.NoClassDefFoundError错误 package e…

Pandas 详解

本文主要介绍python 数据分析模块 Pandas&#xff0c;并试图对其进行一个详尽的介绍。 通过阅读本文&#xff0c;你可以&#xff1a; 掌握 Anaconda 环境的安装及使用了解什么是 Pandas掌握 Series 对象基本操作掌握 DataFrame 对象的基本操作掌握缺值处理掌握 Series 对象和 D…

计算机今年炸了?现在还适合入行吗?

恍惚之间&#xff0c;一年已来到了尾声&#xff0c;对于应届生来说&#xff0c;这是不堪回首的一年&#xff0c;一个字&#xff0c;难。 不但冷门专业就业困难&#xff0c;就连过去的宇宙机专业&#xff0c;也不复盛况&#xff0c;相较于往年的火热&#xff0c;今年的计算机行…

ES6的相关知识点

一&#xff1a;var let const let var区别&#xff1a; 1.let没有变量提升&#xff08;预解析&#xff09;我们先定义再使用&#xff0c;Var可以先使用再定义因为他有预解析,var有声明提升>先上车后买票&#xff0c; 2.let不能在同一个作用域中重复定义变量&#xff0c;如…

使用docker容器部署httpd(绝对可用)

众所周知&#xff0c;httpd是一个服务&#xff0c;里面有很多配置要改&#xff0c;通过dockerfile编写很复杂&#xff0c;所以这里&#xff0c;我们【采用进入容器内修改的方式&#xff0c;去生成一个新的httpd容器】 httpd我们平常用yum安装&#xff0c;所以一定要最好是自带…

【小程序】全局配置window和tabBar

目录 全局配置 1. 全局配置文件及常用的配置项 全局配置 - window 1. 小程序窗口的组成部分 2. 了解 window 节点常用的配置项 ​编辑 3. 设置导航栏的标题 4. 设置导航栏的背景色 5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功能 7. 设置下拉刷新时窗口的背景色 …

Hibernate-Validator(数据校验框架)

目录一、Hibernate-Validator 简介二、项目中为什么要用校验框架三、添加依赖四、看一个入门级案例五、常用注解六、使用groups的校验一、Hibernate-Validator 简介 hibernate-validator是Hibernate项目中的一个数据校验框架&#xff0c;它能够将数据校验从业务代码中脱离出来…

-防火墙-

数据来源 一、防火墙的基本概念 防火墙的定义&#xff1a;是一款具备安全防护功能网络设备 ◆ 隔离网络 将需要保护的网络与不可信任网络进行隔离&#xff0c;隐藏信息并进行安全防护 防火墙基本功能&#xff1a; ◆ 访问控制 - ACL ◆ 攻击防护 ◆ 冗余设计 ◆ 路由、交…

基于XMC4800 Ethercat从站的工厂自动化解决方案

背景 随着“工业4.0”与“工业互联网”概念的提出&#xff0c;“互联网制造”的概念被大众所熟知&#xff0c;人们称之为第四次工业革命。在这样的背景下&#xff0c;新的工业自动化孕育而生。智能工厂、提供智能工厂设计与实施的工业4.0解决方案商、技术供应商相继出现。ARRO…

Android---Banner轮播图

轮播图是一种很常见的UI。Banner框架能够帮助我们快速开发&#xff0c;完成首页轮播图效果的需求。 1、导入Banner依赖 implementation io.github.youth5201314:banner:2.2.2 2、activity_main.xml布局。 banner_loop_time: 设置轮播间隔时间&#xff0c;默认3000&#xff…

逆天了!用Numpy开发深度学习框架,透视神经网络训练过程

哈喽&#xff0c;大家好。 今天给大家分享一个非常牛逼的开源项目&#xff0c;用Numpy开发了一个深度学习框架&#xff0c;语法与 Pytorch 基本一致。 今天以一个简单的卷积神经网络为例&#xff0c;分析神经网络训练过程中&#xff0c;涉及的前向传播、反向传播、参数优化等核…

制作圣诞帽其实特简单(附 Python 代码)

圣诞将至&#xff0c;虽然咱不过这洋节&#xff0c;但是热闹还是要凑一下的&#xff0c;相信已经有很多圣诞帽相关的周边在流传了&#xff0c;今天咱们就自己动手&#xff0c;给头像增加一个圣诞帽。 文章目录基础知识准备数字图像图像通道ROI和mask矩阵&#xff08;Numpy&…

BaseAdapter实现的投票案例

BaseAdapter实现的投票案例 1.知识补充 android:descendantFocusability"blocksDescendants"&#xff0c;关键是让谁先去获取焦点beforeDescendants&#xff1a;viewgroup会优先其子类控件而获取到焦点afterDescendants&#xff1a;viewgroup只有当其子类控件不需要获…

Flink Process Function

处理函数: ProcessFunction: 含有状态流的特性 处理函数面对的是数据流中的最基本元素: 数据事件 event, 状态 state, 时间 time 文章目录1.基本处理函数 ProcessFunction1.1 处理函数的功能和使用1.2 ProcessFunction 解析2.处理函数的分类2.1 按键分区处理函数 KeyedProces…

LaTex期刊模板下载与使用

1 LaTex期刊模板下载与使用 接上文介绍了LaTex的下载安装和基本语法使用规则。 上文地址&#xff1a;科研人快速入门LaTex到日常使用&#xff0c;下载安装配置&#xff0c;语法使用说明等 一般来说&#xff0c;LaTeX主要用在论文提交&#xff0c;书籍排版过程中&#xff0c;提…

Kubernetes:Pod

文章目录1、Pod 定义2、Pod 使用2.1、init 容器2.2、容器生命周期处理函数2.3、容器的探测2.3.1、探测机制2.3.2、探测结果2.3.3、探测类型startupProbereadinessProbelivenessProbe2.3.4、案例2.4、测试代码3、Pod 的部署3.1、Deployment3.2、DaemonSets3.3、静态 pod4、参考p…