当前这个实例实现从众多轮廓中选择出最长最短的轮廓
可以将下面函数打包成本地函数使用
*Contours 输入的要被提取的轮廓
*MinLengthContour,MaxLengthContour,提取出的最短和最长轮廓
*从图片中生成轮廓集
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 25000, 100000)
gen_contour_region_xld (SelectedRegions, Contours, 'border')
*打开halcon错误信息提示功能
dev_set_check ('give_error')
gen_empty_obj (MaxLengthContour)
try
count_obj (Contours, Number)
catch (Exception)
return()
endtry
if(Number<1)
return()
endif
*最长最短长度及其索引初始化
Max_Length :=0
Max_Index :=0
Min_Length :=9999999
Min_Index:=0
*遍历每个轮廓长度
for i:=1 to Number by 1
select_obj (Contours, ObjectSelected, i)
length_xld (ObjectSelected, Length)
*保留最长轮廓及绑住索引
if(Max_Length<Length)
Max_Length := Length
Max_Index := i
endif
*保留最短轮廓及其索引
if(Min_Length>Length)
Min_Length :=Length
Min_Index := i
endif
endfor
*从众多轮廓中选择出最长,最短轮廓
select_obj (Contours,MaxLengthContour , Max_Index)
select_obj (Contours,MinLengthContour , Min_Index)
*效果显示,不用可删除
dev_set_color ('red')
dev_display (Contours)
dev_set_color ('green')
dev_display (MaxLengthContour)
dev_set_color ('blue')
dev_display (MinLengthContour)
效果如图
工业视觉halcon选择出最长最短的轮廓
|