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

2023-11-30 08:44

本文主要是介绍Halcon Solution Guide I basics(5): 1D Measuring(一维测距),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章专栏

我的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)elseset_tposition (WindowID, RowEdgeFirst[i] - 40, ColumnEdgeFirst[i] + 20)endifwrite_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 ()

这篇关于Halcon Solution Guide I basics(5): 1D Measuring(一维测距)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436380

相关文章

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h>int Num[100];int Hang;int Lie;int a;int Flag;int main() {Lie = 1;Hang = 1;a = 0;while (1) {//列1为1if (Lie == 1) {Num[1] = 1;Lie++;}//数据存到数组里面while (Hang >= Lie && Hang !=

树莓派使用WiringPi库配合时间函数实现超声波测距

树莓派使用WiringPi库配合时间函数实现超声波测距 文章目录 树莓派使用WiringPi库配合时间函数实现超声波测距一、HR-04超声波模块原理1.1 超声波测距原理:1.2 超声波时序图: 二、树莓派与超声波模块硬件连接三、时间函数3.1 时间函数gettimeofday()原型和头文件: 四、实现超声波测距4.1 使用wiringOP库和时间函数实现超声波测距: 五、实现超声波测距

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片,视频,摄像头的检测  项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面(GUI)以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测,并估算目标的距离。通过结合YOLOv5的强大检测能力和单目测距技术,系统能够在多种应用场景中提供高效、准确的目标检测和测距功能。 技术栈 YOLOv5:用于目标检测的深度学习模型。Open

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、

将DIB/bitmap读入内存并转为 halcon hobject

问题由来:在mfc halcon混合编程中,发现halcon::readimage() 函数读取图片(8位8M/bmp)至少200ms,当然24位 32位bmp 倍数所消耗的时间倍数上涨。那么有没有什么方法加快读取速度?目前发现一个亲测可行的方式:  1、通过 DIBAPI 读取图片,下载可转到点击打开链接,赚点积分 2、获取所读读片的图像数据的首地址,注意非结构头地址 3、通过halcon

Halcon选择一堆region中面积第N大的region的算法实现

以下图为例: 比如我想把面积第2小的那个“小正方形”选择出来,算法代码如下: 1 read_image (Yuan, 'C:/Users/happy xia/Desktop/yuan.png')2 binary_threshold (Yuan, Region, 'max_separability', 'dark', UsedThreshold)3 connection (Regio