1.做一件事件之前我们先总结一下我们要达到最终结果和目的。
(1)找到物体的外边缘,以及中心点
(2)我们以下图,为对象,对白色圆进行边缘检测。
2.代码实现
****关注简书号:以后我要当村长_0a04: 机器视觉一起互相学习 ****
**读取图片
read_image(img,'测圆形边缘/1')
**计算图片大小
get_image_size(img,width,height)
**关闭窗口
dev_close_window()
**打开窗口
dev_open_window_fit_size(0,0,width,height,-1,-1,window)
**转换为灰度图
rgb1_to_gray(img,grayimg)
**显示图片
dev_display(grayimg)
*填充区域margin找轮廓
dev_set_draw ('margin')
**画你要测量的区域
draw_rectangle1(window,Row1,Column1,Row2,Column2)
**显示你话的区域
gen_rectangle1(roi1,Row1,Column1,Row2,Column2)
*减少其他区域,显示你画的roi区域
reduce_domain(grayimg,roi1,ImageReduced)
dev_display(ImageReduced)
**二值化,选取自己需要的区域
threshold (ImageReduced, Regions, 53, 255)
**连通区域
connection(Regions,ConnectedRegions)
**根据形状选择区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and',10, 8302.75)
**讲区域进行膨胀处理
dilation_circle(SelectedRegions,RegionDilation,10)
**将区域进行腐蚀处理
erosion_circle (SelectedRegions, RegionErosion, 4)
**补充区域的漏洞
fill_up (RegionErosion, RegionFillUp)
**差异计算两个区域的集合理论差异
difference(RegionDilation,RegionFillUp,RegionDifference)
**连接区域
union1 (RegionDifference, RegionUnion)
reduce_domain (ImageReduced, RegionUnion, ImageReduced1)
**使用canny算子提取亚像素轮廓
edges_sub_pix (ImageReduced1, Edges, 'canny', 1, 20, 40)
**
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2)
**裁剪
select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 8, 1000, -0.5, 0.5)
union_adjacent_contours_xld (SelectedContours, UnionContours3, 10, 1, 'attr_keep')
fit_circle_contour_xld (UnionContours3, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi, EndPhi, PointOrder)
gen_circle (Circle, Row1, Column1, Radius1)
*显示结果
dev_set_line_width (2)
dev_set_draw ('margin')
dev_display (img)
dev_display (Circle)
运行结果: