C++调用Halcon结果和HDevelop结果不一致踩坑总结

一、前言

     最新在测试Halcon导出C++格式,算法执行时间速度的变化。用C++控制台程序调用时发现算法执行的结果和HDevelop结果不一致。

踩坑一:读取参数文件的路径不要包含中文

     此项目的Halcon的代码需要依赖外部的txt文件,在HDevelop能正常读取,但是C++执行导出的函数时却报错,查看时发现中文会被转译成数字,用Halcon插件查看显示“字符无效”。故后面改成了英文路径,能够正常读取

踩坑二:Halcon导出的Main函数含有部分初始化文件,不能省略

        解决文件读取的问题后发现 算法执行结果和HDevelop的结果不一致,经过一步步的断点排查发现,在从字典里面拿取HObject的区域范围不对。在将Halcon的导出自带的初始化算子加上后,读取的区域范围最终一致,算法结果也相同了。

HDevelop 中,为了清除窗口图像,您可以使用特定的 HALCON 函数来进行操作。以下是具体的步骤及函数调用示例: ### 清除窗口图像的基本步骤: 1. 确保您正在使用的 HALCON 库版本支持清除窗口图像的功能。 2. 使用 `HAL_Initialize` 或者 `HAL_OpenWindow` 函数打开一个新的图像窗口或获取现有窗口的句柄。 3. 调用 `HAL_Clear` 函数将选定的窗口图像设置为空白,即清除图像内容。 4. 可选地,如果需要调整窗口属性或布局,可以使用其他相应的 HALCON 函数进行调整。 ### 示例代码: 假设我们想要清除名为 "main_window" 的主窗口图像,并且已经在程序开始部分初始化了 HALCON 库以及创建了这个窗口,下面是一个简化的示例代码片段: ```c++ #include <HalCon.h> int main() { // 初始化 HALCON 库 int initStatus = HAL_Initialize(NULL); if (initStatus != OK) { // 处理初始化错误 return -1; } // 获取窗口句柄,这里假设已经有一个名为 "main_window" 的窗口存在并已经被打开 HAL_HANDLE windowHandle = GetMainWindow(); // 清除窗口图像 HAL_Status status = HAL_Clear(windowHandle); if (status != OK) { // 处理清除错误 return -1; } // 清理资源(如果有) HAL_Terminate(); return 0; } ``` ### 相关问题: 1. **如何在 HDevelop 中获取当前激活的窗口句柄?** - 通常,通过使用 `GetActiveWindow()` 函数可以从程序上下文获取当前激活的窗口句柄。 2. **在清除窗口图像之前,是否应该先关闭所有的 HALCON 对象?** - 这取决于具体的应用场景。如果你正在进行一系列处理任务并将窗口内容刷新作为流程的一部分,直接调用 `HAL_Clear` 即可。但在某些复杂流程中,确保所有相关的 HALCON 对象都已妥善释放(如使用完毕后关闭窗口),有助于避免潜在的问题和资源泄露。 3. **在清除图像的同时,还能否对窗口进行其他自定义操作吗?** - 当调用 `HAL_Clear` 来清除窗口内容时,它会立即覆盖现有的图像数据,因此此时无法同时进行其他图形绘制或自定义操作。需要在清除图像之后再执行其他操作。如果需要更精细控制,可以考虑先保存原始图像状态,清除图像后再恢复状态继续后续操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值