发布时间:2026/9/6 2:37:05
如何用VisionPro检测多个瓶子的液位高度?PMAlign+Caliper方案分享(机器视觉工程师经典案例) 康耐视VisionPro液面高度检测方案PMAlign Caliper ToolBlock脚本实现多目标液位标记摘要本文分享一个基于 Cognex VisionPro 的液面检测项目。通过CogPMAlignTool定位每一个容器位置再利用CogCaliperTool对每个容器区域进行边缘检测获取液面高度并通过CogToolBlock脚本自动绘制红色液位标记线。文章包含完整实现思路、脚本代码和关键参数说明典型机器视觉案例.一、项目背景与检测需求在制药、食品、化妆品等行业中瓶装液体的液位高度是一项关键检测项。液位过高或过低都可能影响产品质量。本次项目的需求是同时检测多个排列整齐的容器自动识别每个容器内的液面位置在液面位置绘制一条红色横线便于直观判断实现方案模板匹配定位 卡尺找边 脚本循环处理二、整体实现思路整个程序的流程如下图像采集通过相机获取待检测图像模板匹配使用CogPMAlignTool训练容器模板识别出所有容器得到每个容器的中心坐标(TranslationX, TranslationY)动态 ROI将CogCaliperTool的检测区域CogRectangleAffine中心点移动到每个匹配结果的中心位置边缘检测运行CogCaliperTool找到液面边缘点绘制标记根据边缘点坐标生成一条红色横线并叠加显示核心思想PMAlign 解决在哪里Caliper 解决液面在哪里脚本解决批量处理 可视化。三、工具配置1. CogPMAlignTool 配置训练一个容器的模板建议训练瓶身中部或肩部稳定特征设置合适的匹配分数阈值确保所有容器都能被检测到允许同时返回多个匹配结果Results集合2. CogCaliperTool 配置将卡尺工具的区域类型设置为CogRectangleAffine调整卡尺区域的大小和角度使其覆盖液面可能出现的区域设置边缘极性确保能够准确找到液面边缘四、核心脚本代码所有逻辑都在CogToolBlock的脚本中实现代码如下// 获取 PMAlign 工具CogPMAlignToolpmamToolBlock.Tools[CogPMAlignTool1]asCogPMAlignTool;// 获取卡尺工具CogCaliperToolcalmToolBlock.Tools[CogCaliperTool1]asCogCaliperTool;// 获取卡尺的仿射矩形区域用于动态移动 ROICogRectangleAffineaffinecal.RegionasCogRectangleAffine;// 创建图形集合用于存放绘制的液位线(脚本里面不写这里,写全局变量)CogGraphicCollectiongcnewCogGraphicCollection();// 清空上一次运行绘制的图形避免重复叠加gc.Clear();// 遍历 PMAlign 的所有匹配结果foreach(CogPMAlignResultiteminpma.Results){// 将卡尺 ROI 中心移动到当前匹配目标的中心affine.CenterXitem.GetPose().TranslationX;affine.CenterYitem.GetPose().TranslationY;// 运行卡尺工具检测当前容器内的液面边缘cal.Run();// 遍历当前卡尺结果foreach(CogCaliperResultitem1incal.Results){// 创建一条线段长度 50中心在液面边缘点CogLineSegmentlinenewCogLineSegment();line.SetStartEnd(item1.Edge0.PositionX-25,item1.Edge0.PositionY,item1.Edge0.PositionX25,item1.Edge0.PositionY);// 设置线条颜色为红色line.ColorCogColorConstants.Red;// 添加到图形集合用于显示gc.Add(line);}}五、代码解析5.1 工具对象获取CogPMAlignToolpmamToolBlock.Tools[CogPMAlignTool1]asCogPMAlignTool;CogCaliperToolcalmToolBlock.Tools[CogCaliperTool1]asCogCaliperTool;通过工具名称从ToolBlock中获取 PMAlign 和 Caliper 工具实例。5.2 动态 ROI 移动CogRectangleAffineaffinecal.RegionasCogRectangleAffine;affine.CenterXitem.GetPose().TranslationX;affine.CenterYitem.GetPose().TranslationY;关键点将卡尺区域的中心坐标设置为当前 PMAlign 匹配结果的中心坐标实现 ROI 对每个容器的跟随。5.3 绘制液位线line.SetStartEnd(item1.Edge0.PositionX-25,item1.Edge0.PositionY,item1.Edge0.PositionX25,item1.Edge0.PositionY);line.ColorCogColorConstants.Red;以液面边缘点为中心向左右各延伸 25 个像素绘制一条红色水平线段直观标识液面高度。六、运行效果图片 1ToolBlock 内部工具连接与运行结果说明该图展示了每个容器被 PMAlign 定位后Caliper 动态找边并在液面位置绘制红色标记线的结果。图片 2QuickBuild 整体作业流程说明该图展示了整个 QuickBuild 作业的流程和最终可视化效果。七、关键注意事项模板训练要稳定PMAlign 的模板尽量选择瓶身不受液位变化影响的区域避免液面高低影响匹配稳定性。Caliper ROI 大小要合适ROI 宽度要能覆盖液面可能的变化范围ROI 高度不宜过大避免误检到其他边缘边缘极性设置液面通常是从液体较暗到空气较亮的过渡或者相反需根据实际情况设置边缘极性。图形集合清空每次运行前调用gc.Clear()否则上一次运行的红线会残留在图像上。异常情况处理实际生产建议增加结果数量判断和空结果保护例如if(pma.Resultsnull||pma.Results.Count0)return;八、总结本方案通过PMAlign 定位 Caliper 找边 ToolBlock 脚本循环处理实现了多目标液面高度的自动检测和可视化标记。整个方案的优点结构清晰易于维护扩展性强增减容器数量无需修改脚本可视化效果好红色液位线直观明了希望这篇文章对你有所帮助文章版本v1.0软件环境Cognex VisionPro 9.x / QuickBuild转载请注明出处。

相关新闻

2026/9/6 2:32:05

AI生成的沙盒地图为什么“大而空”?把这7项写进提示词

很多人第一次用自然语言生成沙盒游戏,会输入这样一句话: 做一个开放世界沙盒游戏,里面有山脉、城堡和道路,玩家可以自由探索。 生成结果往往很有气势:地图面积很大,有山、有城堡,也有纵横交错的…

2026/9/6 2:32:05

数据驱动如何革新青训?伊犁基地从经验到科学的实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 3:27:07

从语音识别到字幕打轴:构建智能字幕工作流的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 3:27:07

昆明靠谱导游挑选指南:春城花海之旅避坑攻略+口碑向导推荐

昆明,这座被称为“春城”的高原明珠,藏着石林的喀斯特地质奇迹、滇池的红嘴鸥诗意、云南民族村的多元风情,还有过桥米线的鲜香、汽锅鸡的滋补、鲜花饼的甜蜜。想要深度解锁这里的四季花海、千年地质与滇味美食,选对一位懂石林地质…

2026/9/6 3:27:07

8款精选AI论文工具横向实测,本硕博避坑必备指南

前言:AI 写论文乱象频发,实测 8 款工具理清适配边界 每到毕业季,本科生、硕博生都会集中寻找 AI 论文辅助工具,市面各类写作软件层出不穷。然而,这些工具普遍存在几大硬伤:参考文献虚假、无法匹配本校格式…

2026/9/6 3:27:07

Keepalived 双主架构 + IPVS (LVS) 高可用联动实战

前言前面我们完成了 Keepalived 主备模式、抢占控制、单播心跳的配置。本篇进入企业级高级应用,涵盖两大核心场景:MASTER–MASTER 双主架构:两台节点同时对外提供服务,互为主备,解决单主模式备机资源闲置问题Keepalive…

2026/9/6 3:27:07

AI生成模型本地部署指南:从环境配置到批量任务实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 3:22:07

RK3588边缘AI视觉:基于DMA-BUF的零拷贝跨进程通信实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/5 2:45:13

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/5 2:46:50

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…