halcon边缘查找和后续处理
disp_arrow (WindowID, Row, Column, Row2, Column2, 2)
在屏幕上显示一个箭头
如果下面紧接着是
write_string (WindowID, i)
那个这个字符串的位置就是在箭头所指位置.....
对于圆形区域,我们想拟合出它的圆形轮廓或者其他的圆,我们可以用如下的方法拟合出来:
(1)、如果该区域是一个圆环区域的话,那就运行骨架算子skeleton得到圆环区域的骨架,然后用gen_contours_skeleton_xld生成骨架轮廓。如果该区域是圆形区域,那么可以用产生区域轮廓算子gen_contour_region_xld()产生圆形轮廓。
(2)、有了轮廓后可以先用segment_contours_xld分割一下轮廓。
(3)、对于上一步分割后的轮廓采取一些选择措施,选择出满意的轮廓,比如select_contours_xld算子。
(4)、选择好了轮廓线后进行合并共圆轮廓和合并相邻轮廓操作,算子分别为union_cocircular_contours_xld和union_adjacent_contours_xld。
(5)、对合并好的轮廓可以拟合圆参数fit_circle_contour_xld。
(6)、产生圆gen_circle。
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)
get_region_runs (ObjectSelected, Row, ColumnBegin, ColumnEnd)
功能:查询一个区域的扫描宽度编码
for C := 1 to NContours by 1 select_obj (Contours, ObjectSelected, C) get_contour_xld (ObjectSelected, Row, Col) gen_cross_contour_xld (Cross, Row, Col, 12, rad(0)) dev_set_color ('green') dev_display (Cross) dev_set_color ('blue') dev_display (ObjectSelected) endfor
get_contour_xld (Contour, Row, Col)是得到XLD中的一系列点;
上面可以得到每根线的测量点.....然后画上XX
skeleton (RegionClosing, Skeleton)
骨架轮廓提取
找出轮廓的骨架
提取之前的图片:
执行之后:
skeleton (RegionClosing, Skeleton) gen_contours_skeleton_xld (Skeleton, ContoursSkeleton, 1, 'filter') segment_contours_xld (ContoursSkeleton, ContoursSplitSkeleton, 'lines', 5, 2, 1) select_contours_xld (ContoursSplitSkeleton, SelectedContours, 'contour_length', 30, 1000, -0.5, 0.5) union_collinear_contours_xld (SelectedContours, UnionCollinearContours, 100, 10, 20, rad(10), 'attr_keep')
获取骨架
转换骨架为xld区域
转换xld区域为line线段
选择既定长度的xld线段
合并临近线段
登录后方可回帖
segment_contours_xld——Segment XLD contours into line segments and circular or elliptic arcs(将一个XLD轮廓分割为直线段、圆(圆弧)、椭圆弧。)
查看边缘
分解边缘为line和circle属性
选择分解后的长度在xxx范围内的..
计数
选择分解后的线或者圆属性体
获取选择的属性特征,如果是
Remark:
分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性'cont_approx’参数的值来确定(参考get_contour_global_attrib_xld)。
如果'cont_approx'=-1,这一部分轮廓最适合被拟合为直线段。
如果'cont_approx'=0,这一部分轮廓最适合被拟合为椭圆弧。
如果'cont_approx'=1,这一部分轮廓最适合被拟合为圆弧。