已知Retangle2的中心点坐标,角度,半长,半宽,计算四个顶点坐标和四个线段中点坐标

该代码示例展示了如何在Halcon中通过已知的最小外接矩形参数计算出其四个顶点坐标和四个线段的中点坐标。首先,根据给定的中心点、角度、半长和半宽生成仿射矩形,然后利用三角函数计算每个端点和线段中点的位置,最后用这些坐标生成交叉轮廓进行显示。
摘要由CSDN通过智能技术生成

Halcon可以通过最小外接矩型算子获取Retangle2的中心点坐标,角度,半长,半宽。但是却没有四个顶点坐标和四个线段中点坐标。下面的代码是获取四个顶点坐标和四个线段中点坐标的方法。

gen_rectangle2 (Rectangle, 300, 200, 0.39, 100, 50)
CenterX:=200
CenterY:=300
JXPhi:=0.39
Len1:=100
Len2:=50

*矩形端点坐标变量,变中心坐标变量初始化
CornerX:=[]
CornerY:=[]
LineCenterY:=[]
LineCenterX:=[]
*临时变量初始化
RowT:=0
ColT:=0
*判断仿射矩形是否有效
if (Len1<=0 or Len2<=0)
return ( )
endif
*计算仿射矩形角度的正弦,余弦
tuple_cos(JXPhi,Cos)
tuple_sin(JXPhi,Sin)
*矩形第一个端点
ColT:=CenterX-Len1*Cos-Len2*Sin
RowT:=CenterY-(-Len1*Sin+Len2*Cos)
CornerY:=[CornerY,RowT]
CornerX:=[CornerX,ColT]
*矩形第二个端点
ColT:=CenterX+Len1*Cos-Len2*Sin
RowT:=CenterY-(Len1*Sin+Len2*Cos)
CornerY:=[CornerY,RowT]
CornerX:=[CornerX,ColT]
*矩形第三个端点
ColT:=CenterX+Len1*Cos+Len2*Sin
RowT:=CenterY-(Len1*Sin-Len2*Cos)
CornerY:=[CornerY,RowT]
CornerX:=[CornerX,ColT]
*矩形第四个端点
ColT:=CenterX-Len1*Cos+Len2*Sin
RowT:=CenterY-(-Len1*Sin-Len2*Cos)
CornerY:=[CornerY,RowT]
CornerX:=[CornerX,ColT]
dev_set_color ('white')
gen_cross_contour_xld (Cross, CornerY, CornerX, 10, 0.785398)

*矩形第一条边中心坐标
LineCenterY[0]:=(CornerY[0]+CornerY[1])*0.5
LineCenterX[0]:=(CornerX[0]+CornerX[1])*0.5
*矩形第二条边中心坐标
LineCenterY[1]:=(CornerY[1]+CornerY[2])*0.5
LineCenterX[1]:=(CornerX[1]+CornerX[2])*0.5
*矩形第三条边中心坐标
LineCenterY[2]:=(CornerY[3]+CornerY[2])*0.5
LineCenterX[2]:=(CornerX[3]+CornerX[2])*0.5
*矩形第四条边中心坐标
LineCenterY[3]:=(CornerY[3]+CornerY[0])*0.5
LineCenterX[3]:=(CornerX[3]+CornerX[0])*0.5
dev_set_color ('blue')
gen_cross_contour_xld (Cross1, LineCenterY, LineCenterX, 10, 0.785398)
return()

在这里插入图片描述

计算拟合出最小外接矩形2的四个顶点坐标,并进行仿射变换,可以按照以下步骤进行: 1. 首先,使用Halcon的`gen_rectangle2`函数计算出最小外接矩形的相关参数,包括中心点坐标、宽度、度和旋转角度。假设这些参数分别为`Row`(中心点的行坐标)、`Column`(中心点的列坐标)、`Length1`(宽度)、`Length2`(度)和`Phi`(旋转角度)。 2. 然后,根据最小外接矩形的参数,可以计算四个顶点相对于中心点的相对坐标。根据矩形的宽度和度以及旋转角度,可以得到四个顶点的相对坐标分别为: - 左上角:(-Length1/2, -Length2/2) - 右上角:(Length1/2, -Length2/2) - 右下角:(Length1/2, Length2/2) - 左下角:(-Length1/2, Length2/2) 3. 接下来,可以将相对坐标转换为绝对坐标,即将相对坐标加上中心点坐标四个顶点的绝对坐标分别为: - 左上角:(Row - Length2/2*cos(Phi) - Length1/2*sin(Phi), Column + Length2/2*sin(Phi) - Length1/2*cos(Phi)) - 右上角:(Row - Length2/2*cos(Phi) + Length1/2*sin(Phi), Column + Length2/2*sin(Phi) + Length1/2*cos(Phi)) - 右下角:(Row + Length2/2*cos(Phi) + Length1/2*sin(Phi), Column - Length2/2*sin(Phi) + Length1/2*cos(Phi)) - 左下角:(Row + Length2/2*cos(Phi) - Length1/2*sin(Phi), Column - Length2/2*sin(Phi) - Length1/2*cos(Phi)) 4. 最后,如果需要进行仿射变换,可以使用Halcon的`affine_trans_region`函数将最小外接矩形区域进行仿射变换。根据仿射变换的需求,可以设置变换矩阵,然后将最小外接矩形区域与变换矩阵一起传递给`affine_trans_region`函数。 以上是使用Halcon计算拟合出最小外接矩形2的四个顶点坐标并进行仿射变换的一般步骤,具体实现时需要根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值