资源
链接:https://pan.baidu.com/s/14rj-BKH-7wtF-DCIrTm17w
提取码:re93
图片
代码
* 1.读取并显示图片 *************************************
dev_close_window ()
read_image (Image, './img.bmp')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)
dev_display (Image)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
* 2.初步分割 *************************************
threshold (Image, Region, 0, 100)
* 腐蚀运算
erosion_circle (Region, RegionErosion, 4.5)
* 开运算
opening_circle (RegionErosion, RegionOpening, 1.5)
* 连通域分析
connection (RegionOpening, ConnectedRegions)
* 3.初步分割筛选 *************************************
* 连通域筛选
select_shape (ConnectedRegions, SelectedRegions, ['area','rectangularity'], 'and', [100,0.5], [700,1])
* 产品区域膨胀
dilation_circle (SelectedRegions, RegionDilation, 4.5)
* 减去已经筛选的产品
difference (ConnectedRegions, RegionDilation, SelectedRegions1)
* 最终结果变量
gen_empty_obj (ObjectsConcat)
concat_obj (RegionDilation, ObjectsConcat, ObjectsConcat)
* 4.循环分割筛选 *************************************
for Index := 1 to 7 by 1
* a.粘连产品中间区域 *************************************
* 粘连产品凸性处理
shape_trans (SelectedRegions1, RegionTrans, 'convex')
* 凸性区域 - 粘连区域
difference (RegionTrans, SelectedRegions1, RegionDifference)
* 去除小区域
opening_circle (RegionDifference, RegionOpening1, 3.5)
* 链接中间区域
closing_circle (RegionOpening1, RegionClosing, 30.5)
* 粘连产品减去中间区域
difference (SelectedRegions1, RegionClosing, RegionDifference1)
* 连通域分析
connection (RegionDifference1, ConnectedRegions1)
* b.粘连产品 分割后筛选 *************************************
* 筛选分割后 单个产品
select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 100, 700)
* 膨胀 恢复原始区域
dilation_circle (SelectedRegions2, RegionDilation1, 4.5)
* 单个产品添加到结果中去
concat_obj (ObjectsConcat, RegionDilation1, ObjectsConcat)
* c.去除分割后的产品 再次筛选产品 *************************************
* 去除分割后的产品
difference (SelectedRegions1, RegionDilation1, RegionDifference2)
* 再次筛选分割的产品
select_shape (RegionDifference2, SelectedRegions3, 'area', 'and', 100, 700)
* 膨胀
dilation_circle (SelectedRegions3, RegionDilation2, 4.5)
* 分割后的产品 添加到结果中去
concat_obj (ObjectsConcat, RegionDilation2, ObjectsConcat)
* d.仍然粘连的产品 进入下次循环 *************************************
select_shape (RegionDifference2, SelectedRegions1, 'area', 'and', 700, 99999)
* 统计仍然粘连的产品
count_obj (SelectedRegions1, Number)
* 退出循环
if(Number == 0)
break
endif
endfor
* 6.筛选与中心交叉点计算 *****************************************
select_shape (ObjectsConcat, SelectedRegions4, 'area', 'and', 200, 99999)
area_center (SelectedRegions4, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 15, 0.785398)
count_obj (ObjectsConcat, Number1)
* 5.显示结果 *****************************************
dev_display (Image)
* dev_display (ObjectsConcat)
disp_message (WindowHandle, '产品个数:' + Number1 $'.2f', 'window', 10, 10, 'black', 'true')
dev_display (Cross)