halcon中sort_region标定板之9点标定mark点各方向排序

目录


做的视觉处理项目多了也遇到了很多麻烦事,也少不了掉几根头发

有次项目处理的过程中对精度要求高,但是来料大,视野范围受限等问题

采用了单工位多相机进行视觉处理

这个过程就是让两个相机的图像坐标绑定到同一块标定板上

这个过程就用到了常用的九点标定法

但是由于机构问题的安装的相机方向有点差异,导致

标定板上面的坐标带有方向

想到2个解决方法:

①是旋转旋转图像,让他们方向一致即可—(推荐)
实现功能的halcon算子

rotate_image (, ImageRotate, 90, 'constant')

还可以是相机自带的采图镜像转换

②就是不旋转,标定的时候,获取的点重新排列----于是便有了下面的排列方式


*二值化处理--只获取标定板上面的Mark点
threshold (ImageReduced, Region, 0, 150)
*填充显示--黄色显示
dev_set_color ('yellow')
dev_set_draw ('fill')
*分割图像,将mark点整体分割
connection (Region, ConnectedRegions)
*去噪---面积筛选,只允许150-99999
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
*获取面积及mark区域中心--刚好9个
area_center (SelectedRegions, Area, Row, Column)
*设置字体显示的颜色
dev_set_color ('black')

*序号显示--不排序显示
for Index := 1 to |Area| by 1
    set_tposition (3600, Row[Index-1], Column[Index-1])
    write_string (3600, Index)
endfor
set_display_font (3600, 16, 'mono', 'true', 'false')
disp_continue_message (3600, 'black', 'true')
*按F5继续

dev_close_window ()
dev_open_window (Row1, Column1, 512, 512, 'black', WindowHandle)
dev_display (Image1)
dev_set_color ('pink')
*排序之后在显示row先使用行值,column先使用列值排序--可以看到使用column排序的时候不稳定
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
area_center (SortedRegions, Area1, Row3, Column3)
dev_set_color ('black')
for Index := 1 to |Area1| by 1
    set_tposition (3600, Row3[Index-1], Column3[Index-1])
    write_string (3600, Index)
endfor

*为了解决排序的问题我打算换一种先求一列的或者一行的,然后在排序
dev_close_window ()
dev_open_window (Row1, Column1, 512, 512, 'black', WindowHandle)
dev_display (Image1)
dev_set_color ('blue')
*这样子是以列排序,从左上角开始,那么可以从做小角开始吗?也可以
*左下角√,右下角√,右上角√
*行排序,左上角,右上角,左下角√,右下角也是可以的
*差不多就是这个道理--这样排序就相对稳定许多,用上两个for循环


sort_region (SelectedRegions, SortedRegions, 'first_point', 'false', 'row')
for Index1 := 1 to 3 by 1
    dev_set_color ('red')
    *选择第Index1列的第1个
    select_obj (SortedRegions, ObjectSelected1, 1+ 3*(Index1-1))
    *选择第Index1列的第2个
    select_obj (SortedRegions, ObjectSelected2, 2+ 3*(Index1-1))
    *选择第Index1列的第2个
    select_obj (SortedRegions, ObjectSelected3, 3+ 3*(Index1-1))
    *这样就筛选出第Index1列了,用上数组,循环3此就是区分开3*将每列的形成一个整体
    union2 (ObjectSelected1, ObjectSelected2, RegionUnion)
    union2 (RegionUnion, ObjectSelected3, RegionUnion1)
    *将整体再次分割
    connection (RegionUnion1, ConnectedRegions1)
    *再次排序--用上row值排序
    sort_region (ConnectedRegions1, SortedRegions1, 'first_point', 'true', 'column')
    area_center (SortedRegions1, Area2, Row4, Column4)
    *写序号
    dev_set_color ('black')
    for Index2 := 1 to 3 by 1      
            set_tposition (3600, Row4[(Index2-1)], Column4[(Index2-1)])
            write_string (3600, Index2+(Index1-1)*3)
    endfor  
endfor

PS:关注收藏,不迷路,分享项目小难点。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱搞事的程小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值