Halcon 之 rectangle2的四个顶点

这段代码描述了如何在特定坐标系中生成矩形及其四个顶点的十字交叉标记。通过角度 Phi 和长度 Length1, Length2 定义矩形,然后利用三角函数计算各交叉点的位置。整个过程涉及到几何变换和二维图形的绘制。
draw_rectangle2(3600, Row, Column, Phi, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle4,Row, Column, Phi, Length1, Length2)
 
tuple_cos (Phi, Cos)
tuple_sin (Phi, Sin)
 
dev_set_color('green')
RT_X := -Length1*Cos - Length2*Sin
RT_Y := -Length1*Sin + Length2*Cos
gen_cross_contour_xld(Cross, Row-RT_Y,  Column+RT_X, 6, Phi)
  
RB_X := Length1*Cos - Length2*Sin
RB_Y := Length1*Sin + Length2*Cos
gen_cross_contour_xld(Cross, Row-RB_Y, Column+RB_X, 6, Phi)
  
LB_X := Length1*Cos + Length2*Sin
LB_Y := Length1*Sin - Length2*Cos
gen_cross_contour_xld(Cross, Row-LB_Y, Column+LB_X, 6, Phi)
 
LT_X := -Length1*Cos + Length2*Sin
LT_Y := -Length1*Sin - Length2*Cos
gen_cross_contour_xld(Cross, Row-LT_Y, Column+LT_X, 6, Phi)

 

### 使用 Halcon 获取轮廓的四个顶点坐标 为了获取轮廓的四个顶点坐标,在 HALCON 中可以采用 `smallest_rectangle2()` 函数来计算最小旋转外接矩形,并进一步通过该矩形的信息推导出其四个角点的位置。 `smallest_rectangle2()` 返回的结果包括矩形的中心 `(Row, Column)`、短边长度 `Phi`(表示倾斜角度)、以及长宽尺寸 `(Length1, Length2)`。基于这些数据,能够精确地确定矩形四角的具体位置[^1]。 具体实现方法如下: ```cpp // 假设已有一个 XLD 轮廓对象 ContoursXLD dev_close_window(); read_image (Image, 'fabrik') threshold_sub_pix (Image, Regions, 150, 255) edges_sub_pix (Regions, Edges, 'canny', [-1], 7, 20, 40) select_shape_xld(Edges, SelectedContours, 'area', 'and', 4000, 9999) // 计算最小旋转外接矩形并得到相应参数 smallest_rectangle2 (SelectedContours, Row, Column, Phi, Length1, Length2); // 将上述参数转换为四个顶点的实际坐标 vector_angle_to_rigid(Row, Column, Phi, Row, Column, Phi+PI/2, HomMat2D); affine_trans_point_2d(HomMat2D, Length1/2, Length2/2, Row1, Col1); // 右上角 affine_trans_point_2d(HomMat2D, -Length1/2, Length2/2, Row2, Col2); // 左上角 affine_trans_point_2d(HomMat2D, -Length1/2, -Length2/2, Row3, Col3); // 左下角 affine_trans_point_2d(HomMat2D, Length1/2, -Length2/2, Row4, Col4); // 右下角 ``` 这段代码首先读取图像并提取边缘作为初始轮廓,接着利用 `smallest_rectangle2()` 来求解最优拟合矩形的相关属性;最后借助于向量变换操作 (`vector_angle_to_rigid`, `affine_trans_point_2d`) 完成了从几何描述到实际坐标的映射过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丈八涯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值