HALCON示例程序edge_segments.hdev提取连续的边缘段
示例程序源码(加注释)
-  关于显示类函数解释 
 dev_update_off ()
 dev_close_window ()
 read_image (Image, ‘mreut’)
 get_image_size (Image, Width, Height)
 dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)
 set_display_font (WindowID, 12, ‘mono’, ‘true’, ‘false’)
 dev_set_draw (‘margin’)
 dev_set_line_width (3)
 dev_display (Image)
 disp_continue_message (WindowID, ‘black’, ‘true’)
 stop ()
-  edges_image - 使用Deriche,Lanser,Shen或Canny过滤器提取边缘。 
-  edges_image(图片:边缘幅度,边缘方向:滤波器,高斯标准差,最大抑制,滞后阈值低值,滞后阈值高值 ? 
 edges_image (Image, ImaAmp, ImaDir, ‘lanser2’, 0.5, ‘nms’, 20, 40)
 dev_display (ImaAmp)
 disp_continue_message (WindowID, ‘black’, ‘true’)
 stop ()
-  二值化提取边缘 
 threshold (ImaAmp, Region, 1, 255)
-  分割连通域 
 connection (Region, ConnectedRegions)
 dev_clear_window ()
 dev_set_colored (12)
 dev_display (ConnectedRegions)
 disp_continue_message (WindowID, ‘black’, ‘true’)
 stop ()
 dev_clear_window ()
 count_obj (ConnectedRegions, Number)
-  生成一个空的对象 
 gen_empty_obj (XLDContours)
 for i := 1 to Number by 1- 选取指定图像
 select_obj (ConnectedRegions, SingleEdgeObject, i)
- split_skeleton_lines - 根据线的曲率分割线段
- split_skeleton_lines(边缘 :: 线的最大距离:起点行坐标,起点列坐标,终点行坐标,终点列坐标)
 split_skeleton_lines (SingleEdgeObject, 2, BeginRow, BeginCol, EndRow, EndCol)
 for k := 0 to |BeginRow| - 1 by 1- 这个是根据多个线段生成多边形
 gen_contour_polygon_xld (Contour, [BeginRow[k],EndRow[k]], [BeginCol[k],EndCol[k]])
 concat_obj (XLDContours, Contour, XLDContours)
 
- 这个是根据多个线段生成多边形
 endfor 
 endfor
 dev_display (XLDContours)
- 选取指定图像
处理思路
这个例子是主要讲解了边缘的提取与分割。edges_image、split_skeleton_lines 、gen_contour_polygon_xld
后记
 大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。