当前位置: 首页 > news >正文

【halcon】halcon 函数文件 以及 脚本引擎如何调用外部函数文件 下篇

前言

上次在文章《halcon 函数文件 以及 脚本引擎如何调用外部函数文件 上篇》 中讲到如何halcon去封装一个算子。 这篇下篇,承接上篇讲述C#如何使用halcon引擎调用自己封装好算子。
这样的好处很明显:
1 不用修改C#代码,更新脚本就能改变算法。免去了一个翻译过程,代码也容易维护。
2 可以利用halcon对脚本进行加密。
目前发现的一个坏处:无法主动释放内存,当调用计算量很大算子,或者图片很大时,内存会飙升很快。

具体使用

1 引用dll

首先需要引用dll: hdevenginedotnet.dll

2 指定halcon脚本路径

我们需要把我们封装好的算子们,放在一个路径下面,然后告诉halcon脚本引擎,这个目录:

//实例化一个halcon脚本引擎
public HDevEngine hDevEngine = new HDevEngine();
//指定脚本(外部算子)路径
hDevEngine.SetProcedurePath(HalconScriptDir);

3 加载脚本

HDevProcedure procedure = new HDevProcedure("mytest");

mytest,这个是算子的名称,这里不用加后缀,由于第二步中指定了路径,那么此时HDevProcedure类会在指定路径下寻找这个算子。具体如何封装这个算子请参考《上篇》

算子的调用

加载完算子之后,就可以调用算子了。一个算子最多会有四种类型参数。
1 输入图片类型
2 输入控制类型
3 输出图片类型
4 输出控制类型
所以,我们也要四种函数,去 设置/获取 这四种类型的参数。

procedureCall = new HDevProcedureCall(procedure);
//设置输入图片类型
procedureCall.SetInputIconicParamObject("Image", img);//输入图像
procedureCall.SetInputIconicParamObject("RegionPT", RegionPT);//输入平台区域
//设置输入控制参数
procedureCall.SetInputCtrlParamTuple("posType", posType);
procedureCall.SetInputCtrlParamTuple("minLen",5);
procedureCall.SetInputCtrlParamTuple("maxLineWidth",6);
procedureCall.SetInputCtrlParamTuple("contrast",7);

//运行函数
procedureCall.Execute();

//获取输出图片类型
MarkRegion = procedureCall.GetOutputIconicParamObject("MarkRegion");
len = procedureCall.GetOutputCtrlParamTuple("len");

不过对于获取输出halcon引擎还提供了两个函数封装

procedureCall.GetOutputIconicParamVector                                                                          
procedureCall.GetOutputIconicParamImage
procedureCall.GetOutputCtrlParamVector

貌似是可以从一个数组里获取一个对象,参数既可以传int类型,也可以是string 类型。(有空再研究吧)

小结

调用halcon引擎还是相当简单的,后续有新的内容或者体会,再丰富进来!

相关文章:

  • 基于SSM的图书馆管理系统的设计与实现
  • 目标检测YOLO实战应用案例100讲-基于深度学习的输电线路 鸟巢检测
  • 阿里云虚拟机安装nginx容器步骤
  • 互联网Java工程师面试题·Spring Boot篇·第一弹
  • uniapp开发小程序经验记录
  • python监控cpu程序
  • dockerfile与docker-compose解释及对比
  • C++12.4
  • mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离
  • 「Qt Widget中文示例指南」如何创建一个计算器?(二)
  • [ROS2] --- ROS diff ROS2
  • Python 3 使用 write()、writelines() 函数写入文件
  • SQL Server对象类型(8)——4.8.约束(Constraint)
  • 个人硬件测试用例入门设计
  • 跟我学c++高级篇——动态反射之二动态列表
  • python动态圣诞下雪图
  • C-语言每日刷题
  • MySQL基础『数据类型』
  • echarts 地图
  • 微信扫码登录修改二维码的样式
  • 横跨万里穿越百年,《受到召唤·敦煌》中张艺兴一人分饰两角
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • 兰州大学教授安成邦加盟复旦大学中国历史地理研究所
  • 巴称巴控克什米尔地区11人在印方夜间炮击中身亡
  • 深入贯彻中央八项规定精神学习教育中央第七指导组指导督导中国船舶集团见面会召开
  • 司法部:持续规范行政执法行为,加快制定行政执法监督条例