Halcon卡尺测量

H a l c o n 卡尺测量 Halcon卡尺测量 Halcon卡尺测量

测量卡尺的使用

* 获取图像大小
get_image_size (Image, Width, Height)
*** 创建测量卡尺1
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
*** 卡尺1进行卡点,获取点
measure_pos (Image, MeasureHandle, 1, 30, 'all', 'first', RowEdge1, ColumnEdge1, Amplitude, Distance)

示例

******************************************************************
************************* 卡尺的使用 *********************
******************************************************************
******************************************************************
************************* 工业视觉应用一般流程 *********************
******************************************************************
 dev_get_window (WindowHandle)
 dev_set_draw ('margin')
 
****************************** 1.读取图像 ******************************
read_image (Image, 'fabrik')

****************************** 2.定位 *********************************
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle1, Row, Column, Phi, Length1, Length2)
draw_rectangle2 (WindowHandle, Row1, Column1, Phi1, Length11, Length21)
gen_rectangle2 (Rectangle2, Row1, Column1, Phi1, Length11, Length21)
****************************** 3.获取ROI(感兴趣)区域 ******************
****************************** 4.图像预处理 *****************************
****************************** 5.图像算法处理 ***************************
* 获取图像大小
get_image_size (Image, Width, Height)
*** 创建测量卡尺1
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
*** 卡尺1进行卡点,获取点
measure_pos (Image, MeasureHandle, 1, 30, 'all', 'first', RowEdge1, ColumnEdge1, Amplitude, Distance)


*** 创建测量卡尺2
gen_measure_rectangle2 (Row1, Column1, Phi1, Length11, Length21, Width, Height, 'bilinear', MeasureHandle)
*** 卡尺2进行卡点,获取点
measure_pos (Image, MeasureHandle, 1, 30, 'all', 'first', RowEdge2, ColumnEdge2, Amplitude, Distance)
****************************** 6.结果输出 *******************************
disp_line (WindowHandle, RowEdge1[0], ColumnEdge1[0], RowEdge2[0], ColumnEdge2[0])

1.确定自己先自己设定的区域边缘轮廓
2.沿着边缘轮廓进行卡尺计算
3.最后得到真实轮廓边缘

***************Step1 创建测量句柄*****************************
* 创建测量几何形状所需的数据结构
create_metrology_model (MetrologyHandle)
* 读取图像
read_image (Image, 'fabrik')
* 获取图像大小
get_image_size (Image, Width, Height)
***************Step2 设置计量对象图像的大小*****************************
* 设置计量对象图像的大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
***************Step3 参数设置*****************************
LinePar := [45,360,415,360]
RectPar1 := [270,232,rad(0),30,25]
RectPar2 := [360,230,rad(0),30,25]
LinePar := [45,360,415,360]
RectPar3 := [245,320,rad(-90),70,35]
***************Step4 将计量对象添加到计量模型*****************************
* 将计量对象添加到计量模型
* Add two rectangles
add_metrology_object_generic (MetrologyHandle, 'rectangle2', [RectPar1,RectPar2], \
                              20, 5, 1, 30, [], [], Indices)
* Add a rectangle and a line
add_metrology_object_generic (MetrologyHandle, ['rectangle2','line'], \
                             [RectPar3,LinePar], 20, 5, 1, 30, [], [], Index)
***************Step5 先定轮廓,并对固定轮廓进行卡尺测量,最后得到实际的轮廓对象*****************************
* 在图像坐标中查询计量对象的模型轮廓。
get_metrology_object_model_contour (Contour, MetrologyHandle, 'all', 1.5)
* 测量并拟合计量模型中所有计量对象的几何形状。
apply_metrology_model (Image, MetrologyHandle)
* 查询计量对象的结果轮廓
get_metrology_object_result_contour (Contour1, MetrologyHandle, 'all', \
                                    'all', 1.5)
***************Step6 清除模型句柄 *****************************
clear_metrology_model (MetrologyHandle)
* 在图像坐标中查询计量对象的模型轮廓。
get_metrology_object_model_contour (Contour, MetrologyHandle, 'all', 1.5)

在这里插入图片描述

* 测量并拟合计量模型中所有计量对象的几何形状。
apply_metrology_model (Image, MetrologyHandle)
* 查询计量对象的结果轮廓
get_metrology_object_result_contour (Contour1, MetrologyHandle, 'all', \

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

read_image (Image15, 'C:/Users/29092/Desktop/Test Images/15.bmp')
* read_image (Image15, 'C:/Users/29092/Documents/WXWork/1688853866237112/Cache/File/2021-11/27.bmp')
* read_image (Image16, 'C:/Users/29092/Documents/WXWork/1688853866237112/Cache/File/2021-11/17.bmp')

get_image_size (Image15, Width, Height)

r := []
c := []
row:= 750
column := 80

gen_measure_rectangle2 (row, column, rad(90), 100, 10, Width, Height, 'bilinear', MeasureHandle)
  
for Index := 10 to Width -200 by 10
    
    gen_rectangle2 (Rectangle, row, column, rad(90), 100, 10)
    measure_pos (Image15, MeasureHandle, 1, 30, 'all', 'first', RowEdge, ColumnEdge, Amplitude, Distance)
 
    r:= [r,RowEdge]
    c :=[c,ColumnEdge]
    column := column +10
    translate_measure (MeasureHandle, row, column)
               
endfor

gen_cross_contour_xld (Cross, r, c, 60, 0.785398)
gen_contour_polygon_xld (Contour, r, c)
fit_line_contour_xld (Contour, 'tukey', -1, 0, 10, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

* gen_region_line (RegionLines, RowBegin, ColBegin, RowEnd, ColEnd)
* gen_contour_polygon_xld (Contour1, [RowBegin,RowEnd], [ColBegin,ColEnd])

intersection_lines (RowBegin, ColBegin, RowEnd, ColEnd, RowBegin, 0, RowBegin + 500, 0, Row, Column, IsOverlapping)
gen_cross_contour_xld (Cross1, Row, Column, 60, 0.785398)

intersection_lines (RowBegin, ColBegin, RowEnd, ColEnd, RowEnd, Width, RowEnd + 500, Width, Row1, Column1, IsOverlapping1)
gen_cross_contour_xld (Cross2, Row1, Column1, 60, 0.785398)

gen_contour_polygon_xld (Contour1, [RowBegin,RowEnd], [ColBegin,ColEnd])


gen_region_polygon (Region, [RowBegin + 500, RowBegin, RowEnd, RowEnd + 500], [0,0,Width-1,Width-1])
shape_trans (Region, RegionTrans, 'convex')

reduce_domain (Image15, RegionTrans, ImageReduced)
threshold (ImageReduced, Region1, 128, 255)

dev_display (Image15)
dev_display (Region1)



dev_get_window (WindowHandle)

* list_files ('E:/CG项目/图像数据/Chipping ARR 1101-NG/Chipping ARR 1101-NG', 'directories', directories)
* 获取第一级目录下所有文件夹
list_files ('20211109', 'directories', directories)

* 遍历第一级所有文件夹
for Index1 := 0 to |directories|-1 by 1
    * 获取当前文件夹下所有文件夹
    list_files (directories[Index1], 'directories', directories2)
    * 遍历第二级当前文件夹
    for Index2 := 0 to |directories2|-1 by 1
        * 分割当前文件夹路径
        tuple_split ( directories2[Index2], '\\', Substrings)     
        * 获取分割后字符串数组长度
        tuple_length (Substrings, SubstringsLen)
        * 获取目录(文件夹)名
        tuple_split (Substrings[SubstringsLen-1], '', FileName)
        * parse_filename(directories2[Index2], BaseName, Extension, Directory)
        ***********************************************UpperNG*****************************************************
        * 如果目录(文件夹) 等于 ''UnderNG''
        if(FileName =='UnderNG')
            
            list_files (directories2[Index2], 'files', Files)
            for Index := 0 to |Files|-1 by 1
                parse_filename(Files[Index], BaseName, Extension, Directory)
                if(BaseName =='9' or BaseName =='16' or BaseName =='25' or BaseName =='32' )

                read_image (Image15, Files[Index])

                        ********* 一 定位到边********* 
                        
                        * 1. 最小外接矩形,的角度
                        * 2. 全局特征是否等于-1 ,来判断是否是直线
                        get_image_size (Image15, Width, Height)
                        * 获取边缘
                        gen_rectangle1 (Rectangle1, 0, 0, Width, Height)
                        reduce_domain (Image15, Rectangle1, ImageReduced1)
                        
                        threshold (ImageReduced1, Region1, 128, 255)
                        
                        gen_contour_region_xld (Region1, Contours, 'border')
                        
                        segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 5, 4, 2)
                        
                        select_contours_xld (ContoursSplit, SelectedContours1, 'curvature', 1, 2, -0.5, 0.5)
                        
*                         edges_color_sub_pix (ImageReduced1, Edges, 'canny', 1, 20, 40)
                        
*                         union_adjacent_contours_xld (Edges, UnionContours, 10, 1, 'attr_keep')
                        
                        
                        * 选择边缘
                        select_contours_xld (Edges, SelectedContours, 'contour_length',300, 99999999, -0.5, 0.5)
                        * 获取边缘中心点
                        area_center_xld (SelectedContours, Area1, Row1, Column1, PointOrder)
                        
                        
                        ********* 二 卡尺扫描********* 
                        r := []
                        c := []
                        row:= Row1[0]
                        column := 0
                        
                        * 生成测量卡尺
                        gen_measure_rectangle2 (row, column, rad(45), 50, 10, Width, Height, 'bilinear', MeasureHandle)
                        
                        * 测量所有的点
                        for Index := 10 to Width+20 by 10
                        * 生成矩形框
                        gen_rectangle2 (Rectangle, row, column, rad(90), 50, 10)
                        * 测量
                        measure_pos (Image15, MeasureHandle, 1, 30, 'all', 'first', RowEdge, ColumnEdge, Amplitude, Distance)
                        * 记录测量点
                        r:= [r,RowEdge]
                        c :=[c,ColumnEdge]
                        * 前进步幅
                        column := column +10
                        * 再次测量
                        translate_measure (MeasureHandle, row, column)             
                        endfor
                        
                        
                        left_down := [Height/2,0]
                        right_down := [Height/2,Width]
                        
                        rrr := [Height/2,r]
                        ccc := [0,c] 
                        
                        rrr := [rrr,Height/2]
                        ccc := [ccc,Width] 
                        
                        rrr := [rrr,Height/2]
                        ccc := [ccc,0] 
                        
                        
                        ********* 三 构成多边形ROI区域********* 
                        
                        gen_region_polygon (Region, rrr, ccc)
                else
                       read_image (Image15, Files[Index])

                        ********* 一 定位到边********* 
                        
                        get_image_size (Image15, Width, Height)
                        * 获取边缘
                        gen_rectangle1 (Rectangle1, 0, 0, Width/3, Height)
                        reduce_domain (Image15, Rectangle1, ImageReduced1)
                        
                        edges_color_sub_pix (ImageReduced1, Edges, 'canny', 1, 20, 40)
                        * 选择边缘
                        select_contours_xld (Edges, SelectedContours, 'contour_length',300, 99999999, -0.5, 0.5)
                        * 获取边缘中心点
                        area_center_xld (SelectedContours, Area1, Row1, Column1, PointOrder)
                        
                        
                        ********* 二 卡尺扫描********* 
                        r := []
                        c := []
                        row:= Row1[0]
                        column := 0
                        
                        * 生成测量卡尺
                      
                        
                        gen_measure_rectangle2 (row, column, rad(90), 50, 10, Width, Height, 'bilinear', MeasureHandle)
                        
                        * 测量所有的点
                        for Index := 10 to Width+20 by 10
                        * 生成矩形框
                        gen_rectangle2 (Rectangle, row, column, rad(90), 50, 10)
                        * 测量
                        measure_pos (Image15, MeasureHandle, 1, 30, 'all', 'first', RowEdge, ColumnEdge, Amplitude, Distance)
                        * 记录测量点
                        r:= [r,RowEdge]
                        c :=[c,ColumnEdge]
                        * 前进步幅
                        column := column +10
                        * 再次测量
                        translate_measure (MeasureHandle, row, column)             
                        endfor
                        
                        
                        left_down := [Height/2,0]
                        right_down := [Height/2,Width]
                        
                        rrr := [Height/2,r]
                        ccc := [0,c] 
                        
                        rrr := [rrr,Height/2]
                        ccc := [ccc,Width] 
                        
                        rrr := [rrr,Height/2]
                        ccc := [ccc,0] 
                        
                        
                        ********* 三 构成多边形ROI区域********* 
                        
                        gen_region_polygon (Region, rrr, ccc)
*                         stop()
                endif
            endfor

        endif

    endfor
endfor



halcon卡尺卡出点的xy坐标

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值