halcon封装求两个XLD轮廓中线的函数

        这个函数是为了求两个轮廓的中线而封装的。函数具有两种模式:第一种适用于两根斜的XLD轮廓,原理就是求两根线的夹角,然后再将一根线仿射变换过去;第二种适用于两根平行的线,这种原理就是直接的求平均值。

函数封装: 

函数代码: 

*获取;两线轮廓的中间线
*Contour1为轮廓1,Contour2为轮廓2
*MiddleContour为中间线轮廓
try
    *获取轮廓点位
    get_contour_xld (Contour1, Row1, Column1)
    get_contour_xld (Contour2, Row2, Column2)
    
    if (Model == 1)
        
        *获得两条轮廓的交点
        RowBegin1 := Row1[0]
        ColumnBegin1 := Column1[0]
        RowEnd1 := Row1[|Row1| - 1]
        ColumnEnd1 := Column1[|Column1| - 1]
        
        RowBegin2 := Row2[0]
        ColumnBegin2 := Column2[0]
        RowEnd2 := Row2[|Row2| - 1]
        ColumnEnd2 := Column2[|Column2| - 1]
        
        intersection_lines (RowBegin1, ColumnBegin1, RowEnd1, ColumnEnd1, RowBegin2, ColumnBegin2, RowEnd2, ColumnEnd2,\
                            Row, Column, IsOverlapping)
        
        *计算线之间的角度
        angle_ll (RowBegin1, ColumnBegin1, RowEnd1, ColumnEnd1, RowBegin2, ColumnBegin2, RowEnd2, ColumnEnd2, Angle)
        
        *选择哪条线进行旋转
        Phi := Angle / 2
        vector_angle_to_rigid (Row, Column, 0, Row, Column, Phi, HomMat2D)
        affine_trans_contour_xld (Contour1, MiddleContour, HomMat2D)
        
    elseif (Model == 2)
        *求每个点位中点
        RowMidd := []
        ColumnMidd := []
        
        if (|Row1| > |Row2|)
            for Index := 0 to |Row1| - 1 by 1
                RowMidd := [RowMidd, (Row1[Index] + Row2[Index]) / 2]
                ColumnMidd := [ColumnMidd, (Column1[Index] + Column2[Index]) / 2]
            endfor
        else
            for Index := 0 to |Row2| - 1 by 1
                RowMidd := [RowMidd, (Row1[Index] + Row2[Index]) / 2]
                ColumnMidd := [ColumnMidd, (Column1[Index] + Column2[Index]) / 2]
            endfor
        endif
        
        *拟合直线
        gen_contour_polygon_xld (Contour, RowMidd, ColumnMidd)
        fit_line_contour_xld (Contour, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
        gen_contour_polygon_xld (MiddleContour, [RowBegin, RowEnd], [ColBegin, ColEnd])
    endif
    
    
catch (Exception)
    gen_empty_obj (MiddleContour)
endtry

return ()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值