生成这样的一串矩形并在矩形里可以做一些测量,阈值或其他的运算,目前没有想到更好的方法,目前是使用draw_line (200000, Row1, Column1, Row2, Column2) gen_region_line (RegionLines, Row1, Column1, Row2, Column2) create_metrology_model (MetrologyHandle) add_metrology_object_generic (MetrologyHandle, 'line', [Row1, Column1, Row2, Column2], 20, 5, 1, 30, [], [], Index)
可以间接的获得这些测量区域,使用此种方法也可以获得一些圆形的测量小矩形区域,具体代码如下
dev_update_on () read_image (Image1q, '1q.png') rgb1_to_gray (Image1q, GrayImage) draw_line (200000, Row1, Column1, Row2, Column2) gen_region_line (RegionLines, Row1, Column1, Row2, Column2) create_metrology_model (MetrologyHandle) add_metrology_object_generic (MetrologyHandle, 'line', [Row1, Column1, Row2, Column2], 20, 5, 1, 30, [], [], Index) apply_metrology_model (GrayImage, MetrologyHandle) get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column) * gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398) * get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5) * get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter) dev_update_off () count_obj (Contours, Number) count_seconds(S1) for i := 1 to Number by 1 get_image_size (GrayImage, Width, Height) select_obj (Contours, ObjectSelected, i) smallest_rectangle2_xld (ObjectSelected, Row3, Column3, Phi, Length1, Length2) gen_measure_rectangle2 (Row3, Column3, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle) measure_pos (GrayImage, MeasureHandle, 1, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance) gen_cross_contour_xld (Cross1, RowEdge, ColumnEdge, 6, Phi) endfor count_seconds(S2) Time:=S2-S1第二种方法是将绘制的ROI进行旋转或平移变换来进行位置变动
代码为:
read_image (Image, '无标题.png') get_image_size (Image, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2) dev_set_draw ('margin') gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2) hom_mat2d_identity (HomMat2DIdentity) for Phi := 0 to 360 by 5 hom_mat2d_rotate (HomMat2DIdentity, rad(Phi), 170, 370, HomMat2DRotate) affine_trans_region (Rectangle, RegionAffineTrans, HomMat2DRotate, 'nearest_neighbor') dev_display (RegionAffineTrans) * stop() endfor