HALCON与C++结合处理图象时,通常情况是将HALCON图像处理部分导出C++代码,然后添加到项目中再执行。而HALCON提供了一种脚本执行算法的方式,该方式的优点是:
1、软件界面代码与HALCON图像处理分离,不需要将HALCON图像处理部分导出成C++代码,否则每一次修改HALCON 时,C++代码相应部分就需要跟着更改,便捷性不足。
2、脚本方式执行算法可降低内存泄漏。
引擎引用说明
主要用使用的类:
HDevEngine、HDevProgram、HDevProgramCall、HDevProcedure、HDevProcedureCall、HDevOpMultiWindowImpl、HDevEngineException。
HDevEngine类是管理全局设置。如设置或获取全局变量的值、设置脚本路径、启动停止调试模式等。一般在单个进程中仅能使用一个引擎对象。
HDevProgram类加载.hdev格式文件以及获取文件内部参数一般信息。
HDevProgramCall类执行.hdev文件格式脚本,并获取变量的值。
HDevProcedure类加载.hdvp格式外部函数以及内部函数。
HDevProcedureCall类执行.hdvp外部函数和内部函数。并且可以设置或获取外部函数、内部函数参数。
HDevOperatorImplCpp类主要是设置结果显示的实现方法,在hdev函数中执行的结果可以显示在界面中。
HDevEngineException类是引擎相关的异常类。
引擎的使用方法
这里只提供实现窗口显示的示例,关于引擎的全局变量、函数变量的输入输出操作不做详细说明。
需要的头文件和命名空间
#include “HalconCpp.h”
#include “HDevEngineCpp.h”
using namespace HalconCpp;
using namespace HDevEngineCpp;
调用的hdev文件
main方法内:
调用的自定义函数"Image_Test ":
QT界面进程
界面进程头文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_TestInstance.h"
#include "HalconCpp.h"
#include "HDevEngineCpp.h"
#include "my_hdevoperatorimpl.h"
using namespace HalconCpp;
using namespace HDevEngineCpp;
using namespace std;
class TestInstance : public QMainWindow
{
Q_OBJECT
public:
TestInstance(QWidget *parent = nullptr);
~TestInstance();
HDevEngine my_engine;
HWindow WindowHandle;
std::shared_ptr<HDevProgram> m_ptrHProgram = std::make_shared<HDevProgram>(); //申请加载程序文件引擎指针
std::shared_ptr<HDevProcedure> m_ptrHProcedure = std::make_shared<HDevProcedure>(); //申请加载函数引擎指针
public slots:
void on_pushButton_clicked();
private:
Ui::TestInstanceClass ui;
};
界面进程源文件
#include "TestInstance.h"
TestInstance::TestInstance(QWidget* parent)
: QMai