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

一,背景: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脚本执行了。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值