HALCON示例程序measure_chip.hdev芯片封装检测
示例程序源码(加注释)
- 关于显示类函数解释
dev_update_off ()
read_image (Image, ‘die_on_chip’)
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, 16, ‘mono’, ‘true’, ‘false’)
dev_set_line_width (2)
dev_set_draw (‘fill’) - 快速二值化
fast_threshold (Image, Region, 120, 255, 20) - 开运算
opening_rectangle1 (Region, RegionOpening, 4, 4) - 分割连通域
connection (RegionOpening, ConnectedRegions) - 填充孔洞
fill_up (ConnectedRegions, RegionFillUp) - 通过矩形度与面积筛选区域
select_shape (RegionFillUp, SelectedRegions, [‘rectangularity’,‘area’], ‘and’, [0.8,700], [1,99999]) - 求取可旋转最小外接矩形
smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2) - 求边界,膨胀,减小定义域。以达到提取定义域效果。
boundary (Rectangle, RegionBorder, ‘inner_filled’)
dilation_rectangle1 (RegionBorder, RegionDilation, 4, 4)
reduce_domain (Image, RegionDilation, ImageReduced)
dev_clear_window ()
dev_display (ImageReduced)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop () - 使用canny算子提取边缘
edges_sub_pix (ImageReduced, Edges, ‘canny’, 1.5, 30, 40) - 分割XLD轮廓,算子解释传送门
segment_contours_xld (Edges, ContoursSplit, ‘lines’, 5, 2, 2) - 通过长度筛选边缘
select_contours_xld (ContoursSplit, SelectedContours1, ‘contour_length’, 10, 99999, -0.5, 0.5) - 合并临近的XLD轮廓
union_adjacent_contours_xld (SelectedContours1, UnionContours1, 30, 1, ‘attr_keep’) - 拟合最小外接矩形
fit_rectangle2_contour_xld (UnionContours1, ‘tukey’, -1, 0, 0, 3, 2, Row1, Column1, Phi1, Length11, Length12, PointOrder1) - 绘制XLD最小外接矩形
gen_rectangle2_contour_xld (Rectangle1, Row1, Column1, Phi1, Length11, Length12) - 下边一段代码与上边一样哈
fast_threshold (Image, Region1, 65, 255, 20)
connection (Region1, ConnectedRegions1)
opening_rectangle1 (ConnectedRegions1, RegionOpening1, 10, 10)
fill_up (RegionOpening1, RegionFillUp1)
select_shape (RegionFillUp1, SelectedRegions1, ‘area’, ‘and’, 1000, 99999)
boundary (SelectedRegions1, RegionBorder1, ‘inner’)
dilation_rectangle1 (RegionBorder1, RegionDilation1, 10, 10)
reduce_domain (Image, RegionDilation1, ImageReduced1)
dev_clear_window ()
dev_display (ImageReduced1)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
threshold_sub_pix (ImageReduced1, Border1, 70)
segment_contours_xld (Border1, ContoursSplit2, ‘lines’, 5, 2, 2)
select_contours_xld (ContoursSplit2, SelectedContours2, ‘contour_length’, 30, 99999, -0.5, 0.5)
union_adjacent_contours_xld (SelectedContours2, UnionContours2, 30, 1, ‘attr_keep’)
fit_rectangle2_contour_xld (UnionContours2, ‘tukey’, -1, 0, 0, 3, 2, Row2, Column2, Phi2, Length21, Length22, PointOrder2)
gen_rectangle2_contour_xld (Rectangle2, Row2, Column2, Phi2, Length21, Length22)
dev_clear_window ()
dev_set_colored (3) - dev_display (Image)
dev_display (SelectedContours1)
dev_display (SelectedContours2)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
dev_set_color (‘white’)
dev_display (UnionContours1)
dev_set_color (‘yellow’)
dev_display (UnionContours2)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
dev_display (Image)
dev_set_color (‘white’)
dev_display (Rectangle1)
gen_cross_contour_xld (Cross1, Row1, Column1, 6, Phi1)
dev_display (Cross1)
dev_set_color (‘yellow’)
dev_display (Rectangle2)
gen_cross_contour_xld (Cross2, Row2, Column2, 6, Phi2)
dev_display (Cross2)
distance_pp (Row1, Column1, Row2, Column2, Distance)
DifferenceOrientation := Phi1 - Phi2
set_tposition (WindowID, 10, 10)
write_string (WindowID, ‘Distance between centers: ’ + Distance′.3′+′pixel′)settposition(WindowID,25,10)writestring(WindowID,′Differencebetweenorientations:′+deg(DifferenceOrientation)'.3' + ' pixel') set_tposition (WindowID, 25, 10) write_string (WindowID, 'Difference between orientations: ' + deg(DifferenceOrientation)′.3′+′pixel′)settposition(WindowID,25,10)writestring(WindowID,′Differencebetweenorientations:′+deg(DifferenceOrientation)’.2’ + ’ deg’)
dev_update_window (‘on’)
处理思路
这个例子是主要讲解了矩形边缘的拟合。
后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。