【halcon】轮廓拟合相关函数
创始人
2024-06-01 06:46:54
0

涉及函数

edges_sub_pix

寻找边缘

edges_sub_pix (Image, Edges, 'canny', 1, 10, 20)

后面三个参数,越小,找到的细节越多。这个是对应录波器为'canny'时。

'canny'滤波器用的最多。

segment_contours_xld

将连续的轮廓进行分段,按圆弧或者执行分段
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)

经过这个函数之后,就不会存在直线和圆弧的其他种类的线条。比如折线就不存在了!

折线会被打断成两条直线。

select_contours_xld

对轮廓的某个特征进行筛选:

select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 120, 300000, -0.5, 0.5)

union_adjacent_contours_xld

将相近的轮廓合并成一个轮廓。
union_adjacent_contours_xld (SelectedContours, UnionContours, 100, 1, 'attr_keep')

参数中的100表示只要距离相近100以内就连起来。

fit_circle_contour_xld

将轮廓拟合成圆弧
fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

前面的参数基本都使用默认即可,后面的: Row, Column, Radius, StartPhi, EndPhi, PointOrder,均为输出参数。

利用输出的 Row, Column, Radius,可以根据圆弧生成完整的圆轮廓:

gen_circle_contour_xld (ContCircle, row, column, radius, 0, rad(360), 'positive', 1.0)

circularity_xld

可获取轮廓的圆度:

circularity_xld(ObjectSelected, Circularity)

length_xld

可获取轮廓的长度
length_xld (ObjectSelected, Length)

get_contour_global_attrib_xld

get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)
但是这个函数使用时要注意,所有的轮廓必须先 使用 segment_contours_xld 进行分段。

比如如果有个折线,调用 get_contour_global_attrib_xld 就会报错!Contour attribute not defined

这是因为折线不属于圆弧椭圆弧以及直线。

特别是使用了 union_adjacent_contours_xld  之后注意一定要 使用 segment_contours_xld  进行打断,然后才能使用 get_contour_global_attrib_xld。

结果展示

使用以上函数就能将圆识别到

 

dev_close_window()
dev_update_off ()
read_image (Image, 'D:/视觉图片资料/13.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
edges_sub_pix (Image, Edges, 'canny', 1, 10, 20)
*将连续的轮廓进行分段,按圆弧或者执行分段
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)
select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 120, 300000, -0.5, 0.5)*合并较近的轮廓
union_adjacent_contours_xld (SelectedContours, UnionContours, 100, 1, 'attr_keep')
segment_contours_xld (UnionContours, ContoursSplit, 'lines_circles', 5, 4, 3)
count_obj (ContoursSplit, Number)
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('white')
dev_update_window ('off')length := 0
select := 0
row:= 0 
column:= 0 
radius:= 0
gen_empty_obj (EmptyObject)
for I := 1 to Number by 1select_obj (ContoursSplit, ObjectSelected, I)get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)* 该值如果大于0,说明为圆弧。if (Attrib > 0) concat_obj (ObjectSelected,EmptyObject , EmptyObject)fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)*circularity_xld(ObjectSelected, Circularity)length_xld (ObjectSelected, Length)if(Length > length)length := Length   row:=Rowcolumn:=Columnradius:=Radiusselect := Iendifendifendforselect_obj (ContoursSplit, ObjectSelected, select)
gen_circle_contour_xld (ContCircle, row, column, radius, 0, rad(360), 'positive', 1.0)
dev_display (ContCircle)dev_set_colored (12)
dev_set_line_width (3)
dev_display (SelectedContours)

 

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...