Halcon 区域极值点 (加载区域文件,XLD与区域转换,坐标点排序, 区域排序)

资源文件

链接:https://pan.baidu.com/s/1gULHk3NQn__N-L5TFB_SAw
提取码:z4rs
在这里插入图片描述

dev_set_color ('red')
dev_close_window ()
dev_set_line_width (3)

dev_open_window (0, 0, 940, 500, 'black', WindowHandle)
set_display_font (WindowHandle, 21, 'mono', 'true', 'false')

* 1.读取区域文件并处理 ***************************
read_object (RegionCapsule, 'RegionCapsule.hobj')
* 形状变换
shape_trans (RegionCapsule, RegionCapsule, 'convex')

* 区域 转换为 XLD
gen_contour_region_xld (RegionCapsule, Contours, 'border')
* xld 平滑
smooth_contours_xld (Contours, SmoothedContours, 51)
* xld 转换为 区域
gen_region_contour_xld (SmoothedContours, Region, 'filled')

* 截取上半区域
area_center (RegionCapsule, Area1, CenterRow, CenterColumn)
region_features (RegionCapsule, 'width', Width)
region_features (RegionCapsule, 'height', Height)

* 绘制上半区域矩形
gen_rectangle1 (RectangleUp, CenterRow - Height/2, \
                CenterColumn - Width / 2, \
                CenterRow - Height/3, \
                CenterColumn + Width / 2)
* 获取上半区域
intersection (RectangleUp, Region, RegionIntersection1)

* 获取区域凸包点
get_region_convex (RegionIntersection1, Rows, Columns)

* 2.获取区域 极值点 (坐标排序)***************************
* 坐标点 排序 上点
sort_pairs (Rows, Columns, '1', Sorted1, Sorted2)
TopRow := Sorted1[0]
TopCol := Sorted2[0]
* 坐标点 排序 左点
sort_pairs (Rows, Columns, '2', Sorted1, Sorted2)
LeftRow := Sorted1[0]
LeftCol := Sorted2[0]
* 坐标点 排序 右点
PointCount := |Rows| 
RightRow := Sorted1[PointCount -1]
RightCol := Sorted2[PointCount -1]

* 绘制三个点
gen_cross_contour_xld (CrossTop, TopRow, TopCol, 16, 0.785398)
gen_cross_contour_xld (CrossLeft, LeftRow, LeftCol, 16, 0.785398)
gen_cross_contour_xld (CrossRight, RightRow, RightCol, 16, 0.785398)

* 计算角
angle_ll (LeftRow, LeftCol, TopRow, TopCol,\
          RightRow, RightCol,TopRow, TopCol, Angle1)
* 弧度转为角度
tuple_deg(Angle1, Deg)
ShowMes := Deg $ '.1f'

* 显示结果
dev_clear_window ()
dev_display (RegionIntersection1)
dev_set_color ('blue')
dev_display (CrossTop)
dev_display (CrossLeft)
dev_display (CrossRight)

disp_message (WindowHandle, '角度:' + ShowMes, 'window', 20, 50, 'red', 'true')
stop()

* 3.获取区域 极值点(区域排序)***************************
* 设置半径列表
RadiusLst := []
for RI:=0 to |Rows|-1 by 1
    RadiusLst := [RadiusLst, 3.5]
endfor

* 绘制圆形
gen_circle (CircleS, Rows, Columns, RadiusLst)
* 区域排序
sort_region (CircleS, SortedRegions, 'first_point', 'true', 'row')
* 选择排序后区域
select_obj (SortedRegions, TopRegion, 1)
area_center (TopRegion, Area2, TopRow, TopCol)

* 左边区域
sort_region (CircleS, SortedRegions, 'first_point', 'true', 'column')
select_obj (SortedRegions, LeftRegion, 1)
area_center (LeftRegion, Area2, LeftRow, LeftCol)

* 右边区域
sort_region (CircleS, SortedRegions, 'first_point', 'false', 'column')
select_obj (SortedRegions, RightRegion, 1)
area_center (RightRegion, Area2, RightRow, RightCol)

* 显示结果
dev_clear_window ()
dev_set_color ('red')
dev_display (RegionIntersection1)
dev_set_color ('blue')
dev_display (TopRegion)
dev_display (LeftRegion)
dev_display (RightRegion)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

廷益--飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值