C++ 调用Halcon引擎,脚本调试代码

news2024/9/28 13:19:28

一,背景:C++调用halcon最常见的方式便是转C++代码,然后封装成函数或者类库。另外一种方式是调用Halcon脚本,不需要转换成C++代码,Debug的时候,可以直接跳入halcon脚本,单步查看每一行算法执行情况,非常方便,缺点是效率没有C++的方式高。
二、实现步骤
2.1 先在halcon编辑界面封装一个.hdvp格式的脚本函数,然后利用halcon引擎,在C++中调用即可。
2.2 脚本编辑具体实施步骤如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2 C++调用脚本步骤

#pragma once
#pragma execution_character_set("utf-8")

#include <iostream>
#include <vector>
#include <stdio.h>
#include <iomanip>
#include <sstream>
#include <fstream>
#include <thread>
#include <string>
#include <mutex>
#include <io.h>
#include <direct.h>
#include <Halcon.h>
#include <HalconCpp.h>
#include <HDevEngineCpp.h>

using namespace std;
using namespace HalconCpp;
using namespace HDevEngineCpp;
class HalconJiaoBen
{
public:
	HalconJiaoBen();
	~HalconJiaoBen();
	int TestFunc(string Path, string name);
private:
	HDevEngine *gMyEngine; //Halcon引擎
	HDevProcedure gProgram; //创建程序
	HDevProcedureCall gProcedureCall; //调用程序
};
#include "HalconJiaoBen.h"
HalconJiaoBen::HalconJiaoBen()
{
	gMyEngine = new HDevEngine();
}
HalconJiaoBen::~HalconJiaoBen()
{
	delete gMyEngine;
}
int HalconJiaoBen::TestFunc(string Path, string name)
{
	//设置引擎(devp文件夹路径)
	gMyEngine->SetProcedurePath(Path.c_str()); //devp文件夹路径
	//设置程序和回调函数
	gProgram.LoadProcedure(name.c_str());//devp文件名称
	gProcedureCall = HDevProcedureCall(gProgram);
	//启动调试服务
	gMyEngine->StartDebugServer(); 
	//★等待debug连接,程序会在Execute步骤等待,直至Halcon附加到进程
	gProcedureCall.SetWaitForDebugConnection(true); 
	//设置输入参数
	HObject img;
	ReadImage(&img, "E:/test.bmp");
	gProcedureCall.SetInputIconicParamObject("hImage", img);
	gProcedureCall.SetInputCtrlParamTuple("low", 200); //设置输入参数
	gProcedureCall.SetInputCtrlParamTuple("height", 255); //设置输入参数
	//执行程序
	gProcedureCall.Execute(); 
	//获取结果
	HTuple retX,retY, retData;
	retX = gProcedureCall.GetOutputCtrlParamTuple("retX"); //获取输出参数
	retY = gProcedureCall.GetOutputCtrlParamTuple("retY"); //获取输出参数
	retData = gProcedureCall.GetOutputCtrlParamTuple("retData"); //获取输出参数
	
	//停止调试服务
	gMyEngine->StopDebugServer(); 

	return 0;
}
	//Halcon脚本引擎测试
	halconJiaoBen = new HalconJiaoBen();
	halconJiaoBen->TestFunc(QCoreApplication::applicationDirPath().toStdString() + "/JiaoBen", "HalconJiao");

2.3 需要注意gMyEngine->SetProcedurePath(Path.c_str());设置的是脚本所在文件夹路径,不是文件路径。
gProgram.LoadProcedure(name.c_str());设置的是脚本文件的名称,而不是路径加名称。
2.4配置include路径:
…\HalconSDK\include
…\HalconSDK\include\halconcpp
…\HalconSDK\include\hdevengine
链接器:
halconcpp.lib
hdevenginecpp.lib
依赖库:
hdevenginecpp.dll
三、测试
3.1 测试的时候可以直接运行C++代码。然后打开脚本文件,在运行工具栏下面,选择附加到进程,C++代码设置断点进行调试,就可以跳入到halcon脚本执行了。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

NSObject‘s MetaClass 的 super_class 指向谁 ?

在 Objective-C 运行时系统中&#xff0c;NSObject 是所有类的根类。为了理解 NSObject 的元类&#xff08;MetaClass&#xff09;以及它的 super_class 指针指向谁&#xff0c;我们需要理解元类的继承关系。 类和元类的关系 每个类对象都有一个 isa 指针&#xff0c;指向其元…

谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集

文章目录 一&#xff0c;拆分配置集二&#xff0c;配置文件中配置多配置集1&#xff0c;引用多配置集2&#xff0c;验证 三&#xff0c;多配置集总结1&#xff0c;使用场景2&#xff0c;优先级 这一节介绍如何加载多个配置集。 大多数情况下&#xff0c;我们把配置全部放在一个…

【IEEE官方列表会议,EI, Scopus稳定检索】第三届半导体与电子技术国际研讨会(ISSET 2024,2024年8月23-25)

2024年第三届半导体与电子技术国际研讨会&#xff08;ISSET 2024&#xff09;将于2024年8月23-25日在中国西安举行。 ISSET 2024将围绕“半导体”与“电子技术”等相关最新研究领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一…

url链接地址,#前的参数 和 #后的参数有什么区别

例如 http://localhost:8080/?beforeParams1#/workSchemelist/index?afterParams1 beforeParams 和 afterParams 区别 打印出来可以发现&#xff1a; beforeParams 是 url 的search参数&#xff0c;通过window.location.search获取 afterParams 是 route 的query参数&#…

练手项目---笔记大师

练手项目—笔记大师 项目地址 https://github.com/GXY00/NoteMaster/tree/master 给个⭐呗 项目功能实现 大部分功能已完成&#xff0c;少部分仍在学习中 主要用到的知识点&#xff1a; 开机动画&#xff1a;Timer、TimerTask登录注册功能&#xff1a;SQLitesharedPref…

力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)

力扣爆刷第162天之TOP100五连刷76-80&#xff08;最小路径和、最长公共前缀、最长连续序列&#xff09; 文章目录 力扣爆刷第162天之TOP100五连刷76-80&#xff08;最小路径和、最长公共前缀、最长连续序列&#xff09;一、64. 最小路径和二、221. 最大正方形三、162. 寻找峰值…

UML图书管理系统用例图示例

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 【例4.4】图书管理系统用例图。 图书管理系统按其业务功能分成借阅者管理、图书管理、借书、还书和用户管理等几部分&#xff0c;这些职能对应于系统的不同组织部门。 1&#xff09;系统参…

密态计算,大模型“用数”的必由之路

文&#xff5c;白 鸽 编&#xff5c;王一粟 今年世界人工智能大会上&#xff0c;大模型如何走向深度应用成为重要议题。 但在大模型迈向深度应用的过程中&#xff0c;相比于算力的稀缺&#xff0c;“真正的问题是缺数据&#xff0c;无论是在通用技术领域&#xff0c;还是在专…

基于stm32单片机的智能手环的设计

摘 要 随着科技的飞速发展和人们生活水平的提高&#xff0c;健康与科技日益融合&#xff0c;智能可穿戴设备已成为现代人生活中不可或缺的一部分。智能手环&#xff0c;作为一种便携、实用且功能丰富的可穿戴设备&#xff0c;受到越来越多用户的喜爱。它不仅能够实时监测用户的…

鸿蒙开发:每天一个小bug----鸿蒙开发路由跳转踩坑

一、前言 报错内容显示找不到页面 &#xff0c;肯定我们页面没写对呗&#xff01; 可能是这几个原因:1.main_pages.json没配置路由 {"src": ["pages/02/UserInfoClass","pages/02/AppStorageCase02"] } 2.跳转路径没写对 错误&#xff1a;…

如何管理一百个ai专家智能体——ai调度系统设计

前言 如果你用过openai的chatgpt服务&#xff0c;你肯定知道一个叫做GPTs的智能体商店&#xff0c;里面提供了大量的来自官方和个人制作的专门针对某个领域的gpt助手。比如&#xff0c;你想让gpt帮忙写文章&#xff0c;并且要能够写得好&#xff0c;你就可以在商店中搜索相关的…

JS代码动态打印404页面源码

JS代码动态打印404页面源码&#xff0c;适合做网站错误页&#xff0c;具有js动态打印效果&#xff0c;喜欢的朋友可以拿去 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务…

跌200万后女子要卖掉能看西湖的房子周边有完善配套

今年楼市行情不太好,很多业主都是想要将手中多余的房子出售,因为不想亏 钱了。比如这个业主陈艳也是一样的,日前其决定要将国都公寓的房子出售,然而 根据陈艳描述,这套房子最大的亮点,就是在家就可以欣赏到西湖一隅的美景。 陈艳解释,十多年前买入时,为了居住更舒适,便将…

【Linux】进程7——查看进程

1.为什么进程管理这么重要呢&#xff1f; 这是因为&#xff1a; 首先&#xff0c;我们在操作系统时的各项任务其实都是经过某个PID来完成的&#xff08;包括你的bash环境&#xff09;&#xff0c;因此&#xff0c;能不能执行某项任务&#xff0c;就与该进程的权限有关了。再来…

LLM大模型应用中的安全对齐的简单理解

LLM大模型应用中的安全对齐的简单理解 随着人工智能技术的不断发展&#xff0c;大规模语言模型&#xff08;如GPT-4&#xff09;的应用越来越广泛。为了保证这些大模型在实际应用中的性能和安全性&#xff0c;安全对齐&#xff08;Safe Alignment&#xff09;成为一个重要的概…

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案&#xff08;一&#xff09;混合使用增量更新和全量更新&#xff08;二&#xff09;使用临时表…

基于 Springboot 红酒庄内部信息管理系统 设计实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 6.1数据三范式&#xff1a; &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统登录和首页 系统登录 首页 &#x1f4ac; 用户功能模块 添…

Backend - C# 操作PostgreSQL DB

目录 一、安装 Npgsql 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、操作类 &#xff08;一&#xff09;操作类 1.NpgsqlConnection类 &#xff08;1&#xff09;作用 &#xff08;2&#xff09;引入 &a…

3Ds MAX 2025:创意的翅膀

初识3Ds MAX 2025 在我初次接触3Ds MAX 2025时&#xff0c;仿佛打开了一扇通往无限可能的大门。那时&#xff0c;我还是一个对三维建模充满好奇的初学者&#xff0c;心中怀揣着对未来的憧憬和对艺术的热爱。3Ds MAX 2025的出现&#xff0c;如同一位温柔的导师&#xff0c;带领…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…