halcon 收集Region并带有一定的顺序(以收集有交集的Regon为例)

注意gen_empty_region不与concat_obj成对使用,而是gen_empty_objconcat_obj成对使用。

例如想收集8个region,前者得到9个,第一个是那个被创建的空region。后者则正确。

concat_obj与union2相比,优点是有顺序观念。这个在需要添加自定义前后缀时很有用。

1
2
3
gen_empty_obj (RegionLabelIDs)
*满足某个条件后
concat_obj (RegionLabelIDs, RegionSelected RegionLabelIDs)

或(有顺序需求时推荐上述方法)

1
2
3
gen_empty_region (EmptyRegion)
*满足某个条件后
union2 (ObjectSelected, EmptyRegion, EmptyRegion)

 【关于Region顺序】

concat_obj之后如果union1再connection,会打破之前的顺序。

如果是拆分的区域间进行交集,那么结果的顺序是第一个参数的顺序。RegionIntersectionSort的顺序与ConnectionRegions1一致

intersection (ConnectionRegions1, ConnectionRegions2, RegionIntersectionSort)  

这个在自定义前后缀的需求中非常有用

【实战】

右图以左图的顺序进行排列(第三行的两个是颠倒的)

 思路:左图右移,与右图交集,获取包含交集的右图Region(此时被重排)

复制代码
    move_region (ObjectSelectedCenterIn, RegionMovedRight, 0, MaxHeightLabelIDs*1.5)
    *注意带有顺序的区域放到前边(第1个参数)
    intersection (RegionMovedRight, ConnectedRegionsText, RegionIntersectionSort)
    shape_trans (RegionIntersectionSort, PointInRegion, 'inner_center')    
    area_center (PointInRegion, AreaSort, RowSort, ColumnSort)     
    tuple_int (RowSort, RowSort)
    tuple_int (ColumnSort, ColumnSort) 
    IndexSort:=[]
    for idSort := 0 to |RowSort|-1 by 1
        *获取包含质心点的区域索引
        get_region_index (ConnectedRegionsText, RowSort[idSort], ColumnSort[idSort], IndexSortIn)
        if (IndexSortIn)
            IndexSort:=[IndexSort,IndexSortIn]
        endif
    endfor
    *ObjectSelectedSort的顺序与模型一致
    select_obj (ConnectedRegionsText, ObjectSelectedSort, IndexSort)
复制代码

 

参考 Halcon 获取有交集的其中一个区域,如何获取区域上的一个点

 

posted @   夕西行  阅读(732)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-02-08 CMake Qt配置Halcon
2021-02-08 QGridLayout网格布局(纯代码)
2021-02-08 CMake生成sln
2020-02-08 友元函数
2020-02-08 C++总结
2020-02-08 操作符重载
点击右上角即可分享
微信分享提示