Halcon实战:disp_message算子的5个高效用法(附完整代码)

Halcon实战:disp_message算子的5个高效用法(附完整代码)

在机器视觉项目的开发过程中,我们常常需要将算法处理的结果、关键参数或状态信息直观地展示在图像窗口上。无论是缺陷检测中的不良品标识,还是尺寸测量后的数值标注,清晰、美观的视觉反馈都是提升软件交互性和可解释性的关键。对于Halcon开发者而言,disp_message算子无疑是实现这一功能的首选工具。它看似简单,但许多开发者仅仅停留在“能显示文字”的初级阶段,未能充分挖掘其在提升代码效率、优化用户体验方面的巨大潜力。

这篇文章将跳出常规的参数罗列,从一个实战开发者的视角,深入剖析disp_message算子的五种高效用法。我们将不仅仅关注“怎么用”,更聚焦于“在什么场景下用”以及“如何用得更好”。无论你是正在入门Halcon,希望摆脱代码混乱的初学者,还是寻求代码优化和界面美化的中级用户,相信这些源自实际项目的技巧和完整代码示例,都能帮助你显著提升图像标注的效率和专业度。

1. 告别混乱:多行文本的结构化编排与动态生成

直接在代码里硬编码多行文本是常见的做法,但这会导致代码可读性差,且难以维护。当需要显示的内容随处理结果动态变化时,问题会更加突出。高效的做法是将文本内容的结构化生成与disp_message的显示逻辑分离。

1.1 构建动态消息模板

想象一个产品检测场景,我们需要在图像上显示产品ID、检测时间、合格状态和关键尺寸。与其拼接一个长长的字符串,不如先定义一个清晰的消息结构。

* 假设这是从检测流程中获取的动态数据
ProductID := 'P-20240527-001'
InspectionTime := '2024-05-27 14:30:15'
Status := 'OK'
CriticalDimension := 25.34

* 结构化构建消息数组
Message := []
Message[0] := '产品ID: ' + ProductID
Message[1] := '检测时间: ' + InspectionTime
Message[2] := '状态: ' + Status
Message[3] := '关键尺寸: ' + CriticalDimension$'.2f' + ' mm'

* 统一显示
disp_message(WindowHandle, Message, 'window', 20, 20, 'black', 'true')

这种方式的好处显而易见:每一行信息的来源和格式都清晰独立。当需要增加或删除一行信息时,只需修改Message数组的构建部分,显示逻辑完全不受影响。

1.2 利用循环着色增强信息层级

当消息行数较多时,所有文字一个颜色会显得单调且重点不突出。disp_messageColor参数支持数组输入,可以实现文本行的循环着色。我们可以利用这个特性来区分信息类别。

* 定义不同类别的消息行
InfoLines := ['产品ID: P-20240527-001', '序列号: SN-8876']
ResultLines := ['检测结果: PASS', '置信度: 99.5%']
DataLines := ['长度: 102.3 px', '宽度: 45.7 px']

* 合并所有行
AllMessages := [InfoLines, ResultLines, DataLines]
* 展平为一维数组以便显示
FlattenedMessages := []
for I := 0 to |AllMessages| - 1 by 1
    FlattenedMessages := [FlattenedMessages, AllMessages[I]]
endfor

* 为不同类别定义不同的颜色
* 信息类用深灰色,结果类用绿色,数据类用蓝色
ColorArray := ['dark gray', 'green', 'blue']
* 注意:颜色会按数组顺序循环应用于每一行文本

disp_message(WindowHandle, FlattenedMessages, 'window', 30, 30, ColorArray, 'false')

提示:Color数组的长度不需要与文本行数一致。如果文本行数多于颜色数,颜色会从头开始循环使用。这正好用于我们对信息进行分类标记的场景。

通过上述两种方式的结合,我们能够将杂乱无章的调试信息或结果输出,转变为层次分明、重点突出、易于阅读的视觉报告。

2. 精准定位:掌握“窗口”与“图像”坐标系的场景化选择

disp_messageCoordSystem参数提供了'window''image'两种坐标系,这是实现灵活定位的核心。选错坐标系,可能会导致文字“飘”在错误的位置,或者随着图像缩放而“跑丢”。

2.1 'window'坐标系:用于固定界面元素

'window'坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值