本次分享作为记录使用,主要为代码展示。

首先读取本地图片,绘制需要测量的两段线段。

read_image (Image, 'C:/Users/18708/Desktop/1233/测试.jpg')
rgb1_to_gray (Image, GrayImage)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
dev_set_line_width (2)
*绘制直线1
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
gen_region_line (RegionLine1, Row1, Column1, Row2, Column2)
*绘制直线2
draw_line (WindowHandle, Row21, Column21, Row22, Column22)
gen_region_line (RegionLine2, Row21, Column21, Row22, Column22)

分别创建用于直线1和直线2拟合的数据结构

*创建直线1测量句柄
create_metrology_model (MetrologyHandle1)
set_metrology_model_image_size (MetrologyHandle1, Width, Height)
add_metrology_object_line_measure (MetrologyHandle1, Row1, Column1, Row2, Column2, 20, 5, 1, 30, [], [], Index1)
set_metrology_object_param (MetrologyHandle1, 'all', 'num_instances', 1)
set_metrology_object_param (MetrologyHandle1, 'all', 'num_measures', 20)//卡尺数量
*创建直线2测量句柄
create_metrology_model (MetrologyHandle2)
set_metrology_model_image_size (MetrologyHandle2, Width, Height)
add_metrology_object_line_measure (MetrologyHandle2, Row21, Column21, Row22, Column22, 20, 5, 1, 30, [], [], Index2)
set_metrology_object_param (MetrologyHandle2, 'all', 'num_instances', 1)
set_metrology_object_param (MetrologyHandle2, 'all', 'num_measures', 20)

* 直线1
gen_cross_contour_xld (Cross, Row, Column, 6, rad(45))//用于为每个输入点生成一个十字形状的 XLD 轮廓
get_metrology_object_result (MetrologyHandle1, 0, 'all', 'result_type', 'all_param', Parameter)
get_metrology_object_result_contour (Contour, MetrologyHandle1, 0, 'all', 1.5)
fit_line_contour_xld (Contour, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
* 直线2
gen_cross_contour_xld (Cross1, Row1, Column1, 6, rad(45))//用于为每个输入点生成一个十字形状的 XLD 轮廓
get_metrology_object_result (MetrologyHandle2, 0, 'all', 'result_type', 'all_param', Parameter1)
get_metrology_object_result_contour (Contour1, MetrologyHandle2, 0, 'all', 1.5)
fit_line_contour_xld (Contour1, 'tukey', -1, 0, 5, 2, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Nr1, Nc1, Dist1)
*绘制线段2的直线
k:=(RowEnd1-RowBegin1)/(ColEnd1-ColBegin1)
get_image_size (Image, Width1, Height1)
x1:=0
y1:=k*(x1-ColBegin1)+RowBegin1
x2:=Width1
y2:=k*(x2-ColBegin1)+RowBegin1
gen_region_line (RegionLineX, y1, x1, y2, x2)

根据拟合的数据绘制线段1的中心点以及垂线

* 直线1线段中点获取
area_center_points_xld (Contour, Area, Rowcen, Columncen)
gen_cross_contour_xld (Cross1, Rowcen, Columncen, 50, rad(45))//用于为每个输入点生成一个十字形状的 XLD 轮廓
* 直线1线段中点到直线2的距离
distance_pl (Rowcen, Columncen, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Distance1)//中点到直线的距离
projection_pl (Rowcen, Columncen, RowBegin1, ColBegin1, RowEnd1, ColEnd1, RowProj, ColProj)//垂足获取
gen_region_line (RegionLineT, Rowcen, Columncen, RowProj, ColProj)//垂线
gen_contour_region_xld (RegionLineT, Contours2, 'border_holes')
dev_clear_window ()
dev_display (Image)
dev_set_color ('green')
dev_display (Contour)
*dev_display (Contour1)
dev_display (RegionLineX)
dev_set_color ('red')
dev_display (Cross1)
dev_set_color ('blue')
dev_display (Contours2)

最后附上效果图,短绿线为直线1,长绿线为直线2

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐