Halcon 获取区域上的一个点

【需求】两个区域若有交集,则获取其中一个区域。

例如,获取右图里与左图有交集的区域。一般方法是以右图区域数量进行for循环,if有交集则selcet。
在这里插入图片描述
在这里插入图片描述

【目前找到的最优方法】

思路:取交集内的一个点,然后在右图中选择包含这个点的区域。(这个点不一定是交集质心,因为质心不一定在区域上)

核心函数:get_region_index(拆分的Regions,一个整型Row, 一个整型Column,Index) 获取包含这一个点的区域索引。

由于Row,Column只能是单个整数,所以还是得for循环。但是以交集的数据量进行循环,降低了循环次数。

*获取质心,并将小数整数化
    area_center (拆分的交集Regions, AreCenter, RowCenter, ColumnCenter)    
    tuple_int (RowCenter, RowCenter)
    tuple_int (ColumnCenter, ColumnCenter)   
    IndexCenterInSelect:=[]
    for idCenter := 0 to |RowCenter|-1 by 1
        *获取包含质心点的区域索引
        get_region_index (ConnectedRegionsColon, RowCenter[idCenter], ColumnCenter[idCenter], IndexCenterIn)
        if (IndexCenterIn)
            IndexCenterInSelect:=[IndexCenterInSelect,IndexCenterIn]
        endif
    endfor
    select_obj (拆分的右图Regions, ObjectSelectedCenterIn, IndexCenterInSelect)

由于左图是右图的子集,所以我用了交集质心。因为可以保证这个质心一定在右图的区域上。

【如何获取区域上的一个点】

shape_trans (交集Regions, PointInRegion, ‘inner_center’)

inner_center:在输入区域骨骼上与输入区域重心距离最小的点。

在这里插入图片描述

虽然get_region_points可以获取区域上的所有点,但是这个函数针对的1个Region。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值