C# 基于halcon的视觉工作流-章22-直线查找

本章目标:
一、创建直线卡尺工具;
二、测量及拟合直线;
三、匹配批量查找;

在这里插入图片描述
寻找整图中所有直线,可用霍夫直线查找等算法,而寻找图片中指定区域的直线,除了霍夫直线查找等算法外,halcon还封装了自有的查找测量工具。查找原理是将指定区域划分为等格区域,再对各区域求取梯度变化剧列的点,最后将各点连接拟合组成直线。
在这里插入图片描述
一、创建直线卡尺工具
创建卡尺工具分如下几步:
1、创建计量模型
halcon算子create_metrology_model用于创建计量模型,输出模型句柄,为后续创建各具体测量对象作准备。
与C#联合开发时可用如下方法实现
HOperatorSet.CreateMetrologyModel(out HTuple auto_MetrologyHandle);
其中,auto_MetrologyHandle为输出模型句柄

2、创建直线测量对象
halcon算子add_metrology_object_generic用于将计量对象添加到计量模型中,计量对象有多种,直线、圆、矩形和椭圆等,本文中属直线。
与C#联合开发时可用如下方法实现
HOperatorSet.AddMetrologyObjectGeneric(auto_MetrologyHandle,shape,shapeParam, measureLength1,measureLength2,measureSigma,measureThreshold, genParamName ,genParamValue, out HTuple index );

其中,auto_MetrologyHandle为输入模型句柄,
shape为计量对象的类型,此处为直线line,(圆circle, 椭圆ellipse, 矩形rectangle2)
lineParams为计量对象的参数,
measureLength1为卡尺半长,
measureLength2为卡尺半宽,
measureSigma为高斯函数的西格玛平滑,
measureThreshold为最小边缘振幅,
genParamName 为参数名,
genParamValue为参数值,
index 为输出的计量对象的索引

3、设置测量对象参数
设置参数可以在步骤2中参数名、参数值中进行设置,也可按如下进行单独设置。
halcon算子add_metrology_object_generic用于为计量对象设置参数
与C#联合开发时可用如下方法实现
HOperatorSet.SetMetrologyObjectParam(auto_MetrologyHandle,index,genParamName,genParamValue,);
其中,auto_MetrologyHandle为输入模型句柄,
index为计量对象索引,
genParamName 为参数名,
genParamValue为参数值

参考如下图
在这里插入图片描述
二、测量及拟合直线
测量及拟合分如下几步:
1、测量拟合
halcon算子apply_metrology_model用于测量并拟合计量模型中所有计量对象的几何形状。
与C#联合开发时可用如下方法实现
HOperatorSet.ApplyMetrologyModel(Image, auto_MetrologyHandle);
其中,Image为输入图像,
auto_MetrologyHandle为输入模型句柄

2、获取边缘点坐标
halcon算子get_metrology_object_measures用于获取计量模型的计量对象的测量区域和边缘位置结果,即取得找到的边缘点的坐标。
与C#联合开发时可用如下方法实现
HOperatorSet.GetMetrologyObjectMeasures(out HObject calipersCoutours, auto_MetrologyHandle, index , transition, out HTuple hv_Row, out HTuple hv_Column);

其中,calipersCoutours为输出的卡尺轮廓,
auto_MetrologyHandle为输入模型句柄,
index 为计量对象索引,此处为all,
transition为选择亮/暗或暗/亮边,此处为all,
hv_Row为找到的边缘点的行坐标,
hv_Column为找到的边缘点的列坐标

在这里插入图片描述
3、获取拟合的直线坐标
halcon算子get_metrology_object_measures用于获取计量模型的测量结果。
与C#联合开发时可用如下方法实现
HOperatorSet.GetMetrologyObjectResult(auto_MetrologyHandle, index, instance, genParamName , genParamValue, out HTuple Parameter);
其中,auto_MetrologyHandle为输入模型句柄,
index 为计量对象索引,此处为all,
instance 为计量对象的实例,此处为all,
genParamName 为参数名,此处为result_type,
genParamValue为参数值,此处为all_param,
Parameter为输出结果参数,直线的起末点坐标

4、获取拟合的直线轮廓
halcon算子get_metrology_object_result_contour用于查询计量对象的结果轮廓。
与C#联合开发时可用如下方法实现
HOperatorSet.GetMetrologyObjectResultContour(out HObject ho_ContourXld, auto_MetrologyHandle, index, instance , resolution );
其中,ho_ContourXld为输出轮廓,
auto_MetrologyHandle为输入模型句柄,
index 为计量对象索引,此处为all,
instance 为计量对象的实例,此处为all,
resolution 为相邻轮廓点之间的距离,此处为默认值1.5

在这里插入图片描述
三、匹配批量查找
本文中结合了模板匹配,根据模板匹配查找到各目标图像,再根据目标图像定位到查找区域,最后找到目标直线。核心点在于将模板匹配坐标进行仿射变换,取得查找区域坐标。
效果如下图,不论方向、角度如何,都能自动找到各零件指定区域的直边
在这里插入图片描述
卡尺理论理解-参考链接
https://blog.csdn.net/qq_37299618/article/details/119606955

上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90244.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90244.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90244.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统计与大数据分析与数学金融方向课程差异有哪些?如何提升职场竞争力?

准大一新生在选择专业时,常常会在 “统计与大数据分析” 和 “数学金融” 之间犹豫不决。这两个专业看似都与数字、模型打交道,课程设置存在一定交叉,但核心方向又各有侧重。深入了解它们的异同,能为专业选择和学习规划提供更清晰…

游戏开发Unity/ ShaderLab学习路径

掌握 ShaderLab 需要循序渐进地学习,结合理论、实践和工具。以下是一个推荐的学习路径,帮助你从零基础逐步进阶: 阶段一:基础准备 (理解核心概念与环境)必备知识: 编程基础: 至少熟悉一种编程语言&#xff…

算法----二叉搜索树(BST)

系列文章目录 算法----滑动窗口 算法----二叉树 文章目录系列文章目录二叉搜索树心法(特性篇)二叉搜索树心法(基操篇)1、判断 BST 的合法性2、在 BST 中搜索元素3、在 BST 中插入一个数4、在 BST 中删除一个数二叉搜索树心法&…

GitHub Actions打包容器,推送 AWS ECR 并使 EKS 自动拉取以完成发版部署

以下是关于 EKS 直接拉取 ECR 镜像的解答,以及如何通过 GitHub Actions 将项目打包为容器、推送至 AWS ECR 并使 EKS 自动拉取以完成发版部署的详细步骤。当前时间为 2025 年 7 月 23 日下午 12:27 HKT,基于最新技术实践提供方案。1. EKS 直接拉取 ECR 镜…

洛谷刷题7.24

P1087 [NOIP 2004 普及组] FBI 树 - 洛谷 简单的二叉树遍历 #include<bits/stdc.h> #define ll long long using namespace std; int n; char show(string s){if(s.find(1)string::npos) return B;if(s.find(0)string::npos) return I;return F; } void dfs(string s){…

FreeRTOS—二值信号量

文章目录一、二值信号量简介二、二值信号量相关的API函数2.1.动态方式创建二值信号量2.2.获取信号量2.3.释放信号量三、实验3.1.实验设计3.2.软件设计一、二值信号量简介 二值信号量的本质是一个队列长度为 1 的队列&#xff0c;该队列就只有空和满两种情况&#xff0c;也就是…

挖掘录屏宝藏:Screenity 深度解析与使用指南

挖掘录屏宝藏&#xff1a;Screenity 深度解析与使用指南 在数字内容创作与信息分享日益频繁的今天&#xff0c;录屏软件成为了众多创作者、教育者和办公族的必备工具。今天&#xff0c;我要给大家介绍一款在 GitHub 上收获了大量关注的开源录屏软件 ——Screenity。它功能强大…

4.1.2 XmlInclude 在 C# 中的作用及示例

xmlInclude 是 .NET 中用于 XML 序列化的一个重要特性,XmlInclude 的主要作用是: 1.告知 XML 序列化器可能遇到的派生类型 2.解决多态类型的序列化和反序列化问题 3.允许基类序列化时包含派生类信息 当你有基类引用指向派生类对象时,如果不使用 XmlInclude,序列化器…

ARM汇编常见伪指令及其用法示例

伪指令不是指令&#xff0c;伪指令和指令的根本区别是经过编译后会不会生成机器码。 伪指令的意义在于指导编译过程。 伪指令是和具体的编译器相关的&#xff0c;我们使用gnu工具链&#xff0c;因此学习gnu环境下的汇编伪指令。在 ARM 汇编中&#xff0c;伪指令&#xff08;Pse…

算法调试技巧

引言算法调试常比编写更耗时&#xff0c;尤其是动态规划、递归等逻辑复杂的代码。本文分享一套系统化的调试方法&#xff0c;帮助快速定位问题。一、调试前的准备代码格式化使用统一缩进&#xff08;4 空格&#xff09;和命名规范&#xff0c;避免因格式混乱导致的逻辑误读。边…

每日功能分享|让观看者体验“无缝链接”观看的功能——视频自动续播功能

你是否遇到过这样的困扰——看到一半的视频&#xff0c;关闭后却忘记进度&#xff0c;再打开时需要手动拖拽寻找上次的观看位置&#xff1f;如今&#xff0c;“视频自动续播功能”完美解决了这一痛点&#xff01;无论是在线教育课程、影视剧集还是企业内部员工培训&#xff0c;…

AWS: 云上侦探手册,七步排查ALB与EC2连接疑云

今天&#xff0c;咱们来聊一个对于许多刚接触AWS的运维同学来说&#xff0c;既常见又有点头疼的话题&#xff1a;如何优雅地排查和解决AWS上ALB&#xff08;Application Load Balancer&#xff09;暴露EC2服务时遇到的种种疑难杂症。 最近&#xff0c;我刚帮一个朋友解决了类似…

EIDE 创建基于STM32-HD的项目快速创建流程

EIDE 创建基于STM32-HD的项目流程芯片系列定义宏Flash 大小RAM 大小STM32F10x_HD#define STM32F10X_HD256KB~512KB48KB~64KBSTM32F10x_MD#define STM32F10X_MD64KB~128KB20KBSTM32F10x_LD#define STM32F10X_LD16KB~32KB4KB~10KB 新建项目远程仓库获取裸机开发程序STM(意法半导体…

使用 QLExpress 构建灵活可扩展的业务规则引擎

目录 一、什么是 QLExpress&#xff1f; 二、推荐系统中的规则脚本应用 1 场景描述 2 推荐规则脚本&#xff08;QLExpress&#xff09; 3 系统实现 4 执行结果 5 推荐系统应用建议 三、风控系统中的规则判定 1 场景描述 2 风控规则脚本&#xff08;QLExpress&#xff…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-13,(知识点:DC-DC电源,相位裕度,增益裕度)

目录 1、题目 2、解答 相位裕度 增益裕度 3、相关知识点 一、波特图 二、相位裕度 三、增益裕度 四、在 DC - DC 电源中的应用 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题汇总版&#xff0c;持续更新学习&#xff0c;加油&#xff01;&#xff01;&a…

学生信息管理系统 - HTML实现增删改查

学生信息管理系统 - HTML实现增删改查 效果图 代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

Agile简介

Agile&#xff08;敏捷&#xff09;是一种软件开发方法论&#xff0c;核心是通过快速迭代、灵活响应变化&#xff0c;解决传统软件开发中周期长、需求变更困难等问题&#xff0c;最终高效交付符合用户实际需求的产品。 一、Agile 的起源&#xff1a;为什么需要敏捷&#xff1f;…

关于 URL 中 “+“ 号变成空格的问题

当你在 URL 中传递参数时&#xff0c;加号 () 会被自动转换为空格&#xff0c;这是 URL 编码的标准行为。问题原因在 URL 中&#xff1a;空格会被编码为 号当 URL 被解码时&#xff0c; 号又会被转换回空格这会导致原始数据中的 号丢失解决方案你需要对参数值进行正确的 URL …

综合实验(2)

文章目录 目录 文章目录 前言 OSPF运行在GRE隧道概述 典型应用场景 OSPF over GRE 配置 总结 前言 OSPF运行在GRE隧道概述 GRE&#xff08;Generic Routing Encapsulation&#xff09;隧道是一种通过封装原始数据包在IP网络中创建虚拟点对点连接的隧道技术。OSPF&#xff08;…

【应急响应工具教程】司稽(Whoamifuck):纯Shell打造的Linux应急响应利器

1、工具简介司稽&#xff08;Whoamifuck或Chief-Inspector,简称"who"&#xff09;&#xff0c;永恒之锋发布的第一款开源工具&#xff0c;这是一款由shell编写的Linux应急响应脚本&#xff0c;能对基本的检查项进行输出和分析&#xff0c;并支持一些扩展的特色功能。…