Halcon Solution Guide I basics(5): 1D Measuring(一维测距)

news2024/11/20 10:33:31

文章专栏

我的Halcon开发 CSDN 专栏

Halcon学习 练习项目gitee仓库

CSDN Major 博主Halcon文章推荐

随笔分类 - Halcon入门学习教程

前言

今天来学直线测距,主要是用来测量连点之间的线段距离。感觉是用来得到工业产品精度的。

文章解读

  • 一维测距是非常简单的
  • 这里提供了一个强明暗对比的示例
  • 你可以对示例边缘的左侧和右侧间距进行测距
  • 一维测距的优点是,开销低,速度快,效果好。
    在这里插入图片描述
    在这里插入图片描述

流程图

获取图片->创建测距对象->测距
在这里插入图片描述

官方案例

Inspecting a Fuse(检查保险丝)

在这里插入图片描述

  • 分析线段的组成部分

在这里插入图片描述

  • 进行对称性分析测量,返回对称图像的边缘的宽度和间距
  • 程序将最新的一部分进行分析并且得到XLD轮廓
    在这里插入图片描述

这章算子的概念有点多

Halcon算子_measure_pairs

Halcon 测量之measure_pos算子介绍(四)

Halcon 测量之gen_measure_rectangle2算子介绍(三)

常见图像上采样算法

一维测量中measure_pos和measure_pairs算子

这里遇到的两个十分重要的算子,[gen_measure_rectangle2]和[measure_pairs],由于太过于抽象,需要深入理解,选中算子按下F1进入文档。对我这种英语文盲有点痛苦。

gen_measure_rectangle2

  • gen_measure_rectangle2用于处理直线边缘,垂直于矩形轴线。矩形轴线默认方向为水平,即默认处理竖直的边缘。如果想处理水平的边缘,则需要将ROI区域进行旋转。其它的,看不下了辣
    在这里插入图片描述

mearsur_paris

这位更是重量级,算子的参数基本看不懂。简单来说这个就是用于处理对称边缘的。

如果Transition = ‘positive’,则在矩形长轴方向上具有从暗到亮过渡的边缘点将在RowEdgeFirst和ColumnEdgeFirst中返回。在这种情况下,在RowEdgeSecond和ColumnEdgeSecond中返回具有明暗转换的相应边。如果Transition = ‘negative’,则行为完全相反。如果Transition = ‘all’,第一个检测到的边定义了RowEdgeFirst和ColumnEdgeFirst的过渡。即,根据测量对象的位置,返回具有光-暗-光过渡的边缘对或具有暗-光-暗过渡的边缘对。这适用于测量相对于背景具有不同亮度的物体。
还是给图看得懂
在这里插入图片描述

在这里插入图片描述

代码注释

第一次接触,是真的没看懂。有机会到时候多看看其它的案例融会贯通一下

* fuse.hdev: measuring the width of a fuse wire
* 
dev_update_window ('off')
dev_close_window ()
* ****
* step: acquire image
* ****
read_image (Fuse, 'fuse')
get_image_size (Fuse, Width, Height)
dev_open_window_fit_image (Fuse, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Fuse)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: 创建测距ROI
* ****
* -> 手动定义 ROI
Row := 297
Column := 545
Length1 := 80
Length2 := 10
* rad为度数转弧度。90表达逆时针旋转90°
Angle := rad(90)
* 生成2型矩阵。1型矩形:绝对坐标生成。2型矩形:中心点坐标+长宽+偏转角
gen_rectangle2 (ROI, Row, Column, Angle, Length1, Length2)
* -> 2型矩形测距,获得测距句柄,测试'bicubic'只是算法选择,对结果影响不大
gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, 'bicubic', MeasureHandle)
dev_display (ROI)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: measure
* ****
* 对称性测距。获得对称两边的数据
measure_pairs (Fuse, MeasureHandle, 1, 1, 'negative', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: visualize results
* ****
for i := 0 to |RowEdgeFirst| - 1 by 1
    * 设置边缘的上下边距
    gen_contour_polygon_xld (EdgeFirst, [-sin(Angle + rad(90)) * Length2 + RowEdgeFirst[i],-sin(Angle - rad(90)) * Length2 + RowEdgeFirst[i]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeFirst[i],cos(Angle - rad(90)) * Length2 + ColumnEdgeFirst[i]])
    gen_contour_polygon_xld (EdgeSecond, [-sin(Angle + rad(90)) * Length2 + RowEdgeSecond[i],-sin(Angle - rad(90)) * Length2 + RowEdgeSecond[i]], [cos(Angle + rad(90)) * Length2 + ColumnEdgeSecond[i],cos(Angle - rad(90)) * Length2 + ColumnEdgeSecond[i]])
    * 绘画出上下边缘
    dev_set_color ('cyan')
    dev_display (EdgeFirst)
    dev_set_color ('magenta')
    dev_display (EdgeSecond)
    dev_set_color ('blue')
    * 设置text光标起点,和write_string搭配使用
    if (i == 0)
        set_tposition (WindowID, RowEdgeFirst[i] + 5, ColumnEdgeFirst[i] + 20)
    else
        set_tposition (WindowID, RowEdgeFirst[i] - 40, ColumnEdgeFirst[i] + 20)
    endif
    write_string (WindowID, 'width: ' + IntraDistance[i] + ' pix')
endfor
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: destroy measure object
* ****
close_measure (MeasureHandle)
dev_update_window ('on')
dev_clear_window ()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

稳定的音频来了 — 使用人工智能创作音乐(for free)

今天,以稳定扩散(Stable Diffusion)和StableLM等开源AI工具和模型而闻名的Stability AI公司推出了其首个音乐和声音生成AI产品——StableAudio。音乐产业以其难以打入而闻名。即使您拥有才华和动力,您仍然需要创作和制作音乐所需的…

LaTeX插入裁剪后的pdf图像

画图 VSCode Draw.io Integration插件 有数学公式的打开下面的选项: 导出 File -> Export -> .svg导出成svg格式的文件。然后用浏览器打开svg文件后CtrlP选择另存为PDF,将图片存成pdf格式。 裁剪 只要安装了TeXLive,就只需要在图…

wvp如果确认音频udp端口开放成功

用到工具 在服务器上开启端口监听 选中udp server,点击创建按钮 设置服务器监听端口 在客户端连接服务器端口 选中udp客户端,点击创建 输入服务器地址 远程端口和本地端口,本地端口只要没被占用都可以使用 ,点击确认 发送数据 …

福州大学《嵌入式系统综合设计》 实验九:ROI视频编码

一、实验目的 ROI视频编码即感兴趣区域视频编码,即针对感兴趣区域进行重点编码,提高编码质量,而对非感兴趣区域采用低质量编码。通过这种方法可以降低码率。本实验即让同学们能够在算能的FFMPEG接口下实现基于ROI的视频编码。 二、实验内容…

燃料电池汽车市场分析:预计2028年将达到118亿美元

燃料电池汽车( FCV) 是一种用车载燃料电池装置产生的电力作为动力的汽车。车载燃料电池装置所使用的燃料为高纯度氢气或含氢燃料经重整所得到的高含氢重整气。与通常的电动汽车比较, 其动力方面的不同在于FCV 用的电力来自车载燃料电池装置, 电动汽车所用的电力来自由电网充电的…

C++ AVL 树

AVL树的概念 当数据有序或接近有序二叉搜索树将退化为单支树,此时二叉搜索树的搜索效率低下 解决方法:AVL树(降低树的高度,从而减少平均搜索长度) 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树&#xff1…

C++ 通过CryptoPP计算Hash值

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具,以满足软件开发中对…

Android 10.0 Launcher3定制之首页时钟小部件字体大小的修改

1.前言 在10.0的产品开发中,在一些Launcher3的定制化开发中,在对于一些小屏幕的产品开发中,在首页添加时钟小部件会显得字体有点小, 所以为了整体布局美观就需要改动小部件的布局日期字体的大小来实现整体的布局美观效果,接下来来具体实现相关的功能 具体效果图: 2.Lau…

悠络客受邀出席2023上海区域零售(餐饮)数字化运营实战沙龙研讨会

11月23日,由中国零售(餐饮)CIO俱乐部、《智慧零售与餐饮》主办的2023上海区域零售(餐饮)数字化运营实战沙龙研讨会在上海召开,悠络客合伙人兼销售副总裁张勇作为演讲嘉宾受邀出席了本次大会。 本次研讨会汇…

Android中使用Google Map

在app的使用过程中,我们经常会跟地图进行交互,如果是海外的应用,那选择使用Google Map 是最合适的选择。 在Android中如何使用Google Map,这里做一个简要的说明。 Google API_KEY的申请 Google Map 的使用并不是免费的&#xf…

小航助学题库蓝桥杯题库c++选拔赛(22年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号) 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)

C++面向对象复习笔记暨备忘录

C指针 指针作为形参 交换两个实际参数的值 #include <iostream> #include<cassert> using namespace std;int swap(int *x, int* y) {int a;a *x;*x *y;*y a;return 0; } int main() {int a 1;int b 2;swap(&a, &b);cout << a << &quo…

el-select多选框,数据拼接

将多选框数据 按照逗号拼接为字符串 getTagIds(data, type) {if (type "array") {let array data.join(",")return array} else {let string data.split(",");return string}}, 在调用这个方法时需要&#xff0c;另外传一个字符串type,以此来…

前端:实现二级菜单(点击实现二级菜单展开)

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Spring 日志

日志的作用: 1.定位和发现问题 2.系统监控 3.数据采集 观察日志 先写一段打印日志的代码 日志内容 日志级别分类 默认日志级别是Info,级别一下的就不打印了 Spring 帮我们集成了日志框架,我们直接使用即可 我们测试一下用日志框架打印日志是如何 我们就会发现打印的结果跟…

TypeScript 5.3

导入属性 TypeScript 5.3支持导入属性提案的最新更新。 导入属性的一个用例是向运行库提供有关模块预期格式的信息。 // We only want this to be interpreted as JSON, // not a runnable/malicious JavaScript file with a .json extension. import obj from "./somet…

VSCODE 在新窗口中打开

使用VS习惯了&#xff0c;经常在新窗口中打开查看 但是VSCODE&#xff0c;无法拖动标签到一个新窗口中&#xff0c;一直以为没这个功能 后来发现 使用快捷健 ctlk,o 可以将标签页在新窗口中打开&#xff0c;虽然不如vsstudio方便&#xff0c;不过也可实现在新窗口打开的功能…

Mac 浏览器下载的文件名总是「乱码」

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 本文所说的方法是在出现文件名乱码情况下&#xff0c;如何恢复文件名的正确中文名称&#xff0c;并非一劳永逸地避免乱码的出现。这是由于下载文件名称乱码的出现&#xff0c;往往是系统、浏览器、网站三方面因素共…

基于containerd容器运行时,kubeadmin部署k8s 1.28集群

一.主机准备 1.1主机配置与操作系统说明 centos7u9 1.2主机硬件配置说明 序号主机名ip地址CPU内存硬盘1k8s-master1192.168.1.2002C2G100G2k8s-worker1192.168.1.2012C2G100G3k8s-worker2192.168.1.2022C2G100G 1.3主机配置 1.3.1主机名配置 hostnamectl set-hostname k…

【滑动窗口】长度最小的数组

长度最小的数组 长度最小的数组 文章目录 长度最小的数组题目描述解法暴力解法滑动窗口Java示例代码c示例代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, num…