取每个对象的内接矩形框,然后再排序,根据排序的结果确定原对象顺序。
inner_rectangle1(RegionAffineTrans1, Row1, Column1, Row2, Column2)
gen_rectangle1(Rect,Row1, Column1, Row2, Column2)
sort_region(Rect,RectSort,'character','true', 'row')
count_obj (RegionAffineTrans1, Number)
gen_empty_obj(RegionAffineTransSort)
dev_update_off ()
for i:=1 to Number by 1
select_obj (RectSort, ObjectSelected1, i)
for j:=1 to Number by 1
select_obj (RegionAffineTrans1, ObjectSelected2, j)
intersection(ObjectSelected1,ObjectSelected2,ObjectSelected)
area_center (ObjectSelected, Area, Row1, Column1)
if (Area>1)
concat_obj(RegionAffineTransSort,ObjectSelected2,RegionAffineTransSort)
break
endif
endfor
endfor
dev_update_off ()
dev_close_window ()
read_image (Image, 'E:/Users/laihuaxun/Desktop/14_51340_b19208273509701.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle)
dev_display (Image)
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
dev_display (Image)
dev_display (Rectangle)
*扣图
reduce_domain (Image, Rectangle, ImageReduced)
*分割
threshold (ImageReduced, Regions, 150, 255)
connection (Regions, ConnectedRegions)
*筛选
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1475, 99999)
*求区域中心
area_center (SelectedRegions, Area1, Row, Column)
*在区域中心生成小圆
tuple_gen_const (|Row|, 20.5, Radius)
gen_circle (Circle, Row, Column, Radius)
*对小圆排序
sort_region (Circle, SortedRegions, 'character', 'true', 'row')
*得到排序后的中心坐标
area_center (SortedRegions, Area, Row1, Column1)
*显示结果
dev_display (ImageReduced)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
count_obj (SortedRegions, Number)
for i:=1 to Number by 1
*根扰排序后坐标得到筛选区域索引
get_region_index (SelectedRegions, Row1[i-1], Column1[i-1], Index)
*根据索引选择区域,这个区域就是按顺序进行选中
select_obj (SelectedRegions, ObjectSelected1, Index)
*显示
dev_display (ObjectSelected1)
dev_disp_text (i, 'image', Row1[i-1]-10, Column1[i-1]-10, 'yellow', 'box', 'false')
endfor
threshold (Image, Regions, 118, 255)
closing_circle (Regions, RegionClosing, 55)
connection (RegionClosing, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
intersection (Regions, SelectedRegions, RegionIntersection)
closing_circle (RegionIntersection, RegionClosing1, 5)
connection (RegionClosing1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 880.22, 10000)
shape_trans (SelectedRegions1, RegionTrans, 'convex')
area_center (RegionTrans, Area, Row, Column)
tuple_round (Row/10, Round)
Round:=Round*10
Round:=Round-Round[0]
Round:=round(Round/70.0)
Round:=Round*70.0+Row[0]/10*10
gen_region_points (Region, Round, Column)
connection (Region, ConnectedRegions2)
sort_region (ConnectedRegions2, SortedRegions, 'upper_left', 'true', 'row')