HALCON示例程序measure_circles.hdev测量圆的半径

HALCON示例程序measure_circles.hdev测量圆的半径

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    read_image (Image, ‘circle_plate’)
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width / 2, Height / 2, ‘light gray’, WindowID)
    dev_set_part (0, 0, Height - 1, Width - 1)
    dev_set_line_width (3)
    dev_set_color (‘white’)
    dev_set_draw (‘margin’)
    dev_display (Image)
    set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    dev_set_colored (12)
    dev_set_line_width (2)
    dev_set_draw (‘fill’)
  • 快速阈值分割,分割连通域,使用面积进行区域筛选,快速筛选出测量区域。
    fast_threshold (Image, Region, 200, 255, 20)
    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 70, 50000)
    dev_display (Image)
    dev_display (SelectedRegions)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
  • 求取边缘,膨胀,缩减定义域,求取边缘,分割边缘,筛选边缘
    boundary (SelectedRegions, RegionBorder, ‘inner_filled’)
    dilation_circle (RegionBorder, RegionDilation, 3.5)
    union1 (RegionDilation, RegionUnion)
    reduce_domain (Image, RegionUnion, ImageReduced)
    dev_clear_window ()
    dev_display (ImageReduced)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    edges_sub_pix (ImageReduced, Edges, ‘canny’, 1.5, 10, 40)
    segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 5, 2, 2)
    select_contours_xld (ContoursSplit, SelectedContours, ‘contour_length’, 25, 99999, -0.5, 0.5)
    count_obj (SelectedContours, NumberContours)
    gen_empty_obj (Circles)
    for i := 1 to NumberContours by 1
    select_obj (SelectedContours, ObjectSelected, i)
    • get_contour_global_attrib_xld - 返回XLD轮廓的全局属性值。cont_approx是椭圆还是圆形?
    • get_contour_global_attrib_xld(轮廓::属性:属性值)
      get_contour_global_attrib_xld (ObjectSelected, ‘cont_approx’, Attrib)
      if (Attrib == 1)
      concat_obj (Circles, ObjectSelected, Circles)
      endif
  • 结束循环
    endfor
  • 合并属于一个圆形的轮廓
    union_cocircular_contours_xld (Circles, UnionContours, rad(60), rad(10), rad(30), 100, 50, 10, ‘true’, 1)
    dev_clear_window ()
    dev_set_color (‘black’)
    dev_display (UnionContours)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    count_obj (UnionContours, NumberCircles)
    CenterRow := []
    CenterColumn := []
    dev_clear_window ()
    dev_set_color (‘black’)
    set_display_font (WindowID, 12, ‘mono’, ‘true’, ‘false’)
    dev_display (SelectedContours)

for i := 1 to NumberCircles by 1
select_obj (UnionContours, ObjectSelected, i)
* 拟合圆形
fit_circle_contour_xld (ObjectSelected, ‘algebraic’, -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), ‘positive’, 1.5)
dev_set_color (‘white’)
dev_display (ContCircle)
if (i == 1)
Row2 := Row + Radius * sin(rad(-45))
Column2 := Column + Radius * cos(rad(-45))
set_tposition (WindowID, Row2 - 35, Column2 + 5)
endif
if (i > 1)
exist := 0
for j := 0 to i - 2 by 1
distance_pp (Row, Column, CenterRow[j], CenterColumn[j], DistanceCenters)
if (DistanceCenters < 20)
exist := 1
endif
endfor
if (exist == 1)
Row2 := Row + Radius * sin(rad(-135))
Column2 := Column + Radius * cos(rad(-135))
set_tposition (WindowID, Row2 - 40, Column2 - 30)
else
Row2 := Row + Radius * sin(rad(-45))
Column2 := Column + Radius * cos(rad(-45))
set_tposition (WindowID, Row2 - 35, Column2 + 5)
endif
endif
disp_arrow (WindowID, Row, Column, Row2, Column2, 2)
write_string (WindowID, i)
if (i < 8)
disp_message (WindowID, ‘R’ + i + ’ = ’ + Radius′.4′,′window′,i∗20,130,′black′,′false′)elsedispmessage(WindowID,′R′+i+′=′+Radius&#x27;.4&#x27;, &#x27;window&#x27;, i * 20, 130, &#x27;black&#x27;, &#x27;false&#x27;) else disp_message (WindowID, &#x27;R&#x27; + i + &#x27; = &#x27; + Radius.4,window,i20,130,black,false)elsedispmessage(WindowID,R+i+=+Radius’.4’, ‘window’, (i - 7) * 20, 400, ‘black’, ‘false’)
endif
CenterRow := [CenterRow,Row]
CenterColumn := [CenterColumn,Column]
endfor
dev_update_window (‘on’)

处理思路

这个例子是主要讲解了distance_transform算子的应用。

后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

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

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

相关文章

OpenTLD 未完成 - 虎头

TLD是一种算法的简称&#xff0c;原作者把它叫做Tracking-Learning-Detection。搞视觉的人看到这个名字都会吓一跳&#xff0c;很ambitious的计划。是09年的工作&#xff0c;不算太久&#xff0c;不过也不太新。网上关于这个的资源其实很多&#xff0c;很大程度和作者开放源代码…

C# FileSystemWatcher 在监控文件夹和文件时的用法

********************************************************************************** 第一个文章: ********************************************************************************** 概述 最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要…

比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍

TLD (Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生在其攻读博士学位期间提出的一种新的单目标长时间&#xff08; long term tracking &#xff09;跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被…

HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测

HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () dev_close_window () read_image (Image, ‘pcb_color’) get_image_size (Image, Width, Height) dev_open_window…

一张图看懂混合云数据同步一站式解决方案

摘要&#xff1a; 针对不同数据库间数据实时同步难的问题&#xff0c;日前&#xff0c;阿里云宣布推出混合云数据同步一站式解决方案&#xff0c;便于广大云产品用户实现实时数据同步的混合云支持&#xff0c;更为方便的是&#xff0c;该功能让本地Oracle也能实现与云上数据库的…

分布式性能测试

Jmeter分布式测试 在使用Jmeter进行性能测试时&#xff0c;如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;这时可以使用Jmeter提供的分布式测试的功能。 一、Jmeter分布式执行原理&#xff1a; 1、Jmeter分布式…

互斥锁pthread_mutex_t的使用

1. 互斥锁创建 有两种方法创建互斥锁&#xff0c;静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁&#xff0c;方法如下&#xff1a; pthread_mutex_t mutexPTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中&#xff0c;pthread_…

无效设备解决办法

touch /etc/ini.d/FirstLoadkill 杀死枪弹柜程序 或重启reboot转载于:https://www.cnblogs.com/yygsj/p/5634384.html

HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓

HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘keypad’) get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window…

[BZOJ3992]序列统计

DP一下&#xff0c;设$f_{i,j}$表示生成$i$个数且乘积$\%Mj$的方案数&#xff0c;则$f_{i1,l}\sum\limits_{jk\%Ml}[k\in S]f_{i,j}$ 我们很不希望DP式中下标的位置出现乘法&#xff0c;因为这样不好转移&#xff0c;考虑把乘法换成加法 因为模数$M$是质数&#xff0c;所以它有…

socket,TCP/IP的理解(转)

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族&#xff0c; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;即传输控制协议/网间协议&#xff0c;定义了主机如何连入因特网及数据如何再它们之间传输的标准&#xff0c; 从字面意思来看TCP…

最小中间和

题目描述 给定一个正整数序列a1,a2,...,an&#xff0c;不改变序列中的每个元素在序列中的位置&#xff0c;把它们相加&#xff0c;并用括号记每次加法所得的和&#xff0c;称为中间和。编程&#xff1a;找到一种方法&#xff0c;添上n-1对括号&#xff0c;加法运算依括号顺序进…

HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量

HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) init_visualization (Image, 3, ‘white’, ‘margin’, Width, …

双目匹配与视差计算

立体匹配主要是通过找出每对图像间的对应关系&#xff0c;根据三角测量原理&#xff0c;得到视差图&#xff1b;在获得了视差信息后&#xff0c;根据投影模型很容易地可以得到原始图像的深度信息和三维信息。立体匹配技术被普遍认为是立体视觉中最困难也是最关键的问题&#xf…

JavaEE 银联支付之网站支付-消费类交易

以银联网站支付 - 消费类交易 为例 0. 大致逻辑 前端request->后台封装参数->后台进行签名->生成跳转页面&#xff08;包含表单提交内容&#xff09;->响应前端&#xff08;将生成的html写到浏览器中完成自动跳转打开银联支付页面&#xff09; 复制代码1.acp_sdk.p…

react 开发知识准备

react react使用教程 babel babel 可用于ES6转换为ES5&#xff0c;jsx转换为原生js。 ES6 ES6 语法 webpack webpack打包工具&#xff0c;它把不同的、相互依赖的静态资源都视作模块&#xff0c;并且打包成我们想要的静态资源。让代码组织更清晰&#xff0c;一个文件就是一个模…

Linux多线程编程(不限Linux)

——本文一个例子展开&#xff0c;介绍Linux下面线程的操作、多线程的同步和互斥。 前言 线程&#xff1f;为什么有了进程还需要线程呢&#xff0c;他们有什么区别&#xff1f;使用线程有什么优势呢&#xff1f;还有多线程编程的一些细节问题&#xff0c;如线程之间怎样同步、…

概率论与数理统计-ch8-假设检验

1、假设检验 在总体的分布函数未知或只知其形式、不知其参数的情况下&#xff0c;为了推断总体的某些未知特性&#xff0c;提出关于总体的假设&#xff0c;然后根据样本数据对提出的假设做出接受或拒绝的决策。 步骤&#xff1a; 提出原假设--确定建立在样本基础上的检验统计量…

HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量

HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) get_image_size (Image, Width, Height) dev_close…

简单实现仿某宝地址选择三级联动样式

内容简单介绍实现步骤第一步 找准方向第二步 开干总结还是题外话内容简单介绍 简单看一下须要实现的效果&#xff0c;如图&#xff1a; 实现步骤 第一步 找准方向 事实上就是想好要用recyclerview而不是listview。假设要问我recyclerview是什么的话。。 第二步 开干 首先须要先…