设为首页收藏本站
授权版本:2024_07
开启左侧

如何求出任意矩形的四个顶角位置?

[复制链接]
3088286561 发表于 2020-12-11 14:25:19 | 显示全部楼层 |阅读模式
在halcon如何求出任意矩形的四个顶角位置?我这里写了两种比较常见的写法!原理是通过三角函数计算
1.第一种写法我是用三角函数进行计算求出
2.第二种是利用halcon自带的仿射变换得出,通过矩阵关系,然后仿射点的关系而得出的
原图:
求矩形的四个角的位置.png
处理后的结果:
结果.png

这里将为大家免费展示的是第二种写法,也就是通过仿射关系求出,比较简单
*生成两个矩形(一个是平行于轴的矩形,不带角度的,另一个是带角度的矩形)
gen_rectangle1 (ROI_0, 47, 46, 122, 320)
gen_rectangle2 (ROI_1, 273, 178, rad(10.9807), 136.499, 34.4194)


dev_set_draw ('margin')
dev_set_color ('red')
*这里是自己定义的函数
gen_4_point_1_rectangle (ROI_0, R1, C1)
gen_4_point_1_rectangle (ROI_1, R2, C2)

dev_display (ROI_0)
dev_display (ROI_1)
dev_set_color ('yellow')
gen_cross_contour_xld (Cross, R1, C1, 20, 0.785398)
gen_cross_contour_xld (Cross1, R2, C2, 20, 0.785398)


//////////////////////////////////////////////////////////////////////////////
下面是gen_4_point_1_rectangle 函数里面的代码,

*获取外接最小矩形的参数
smallest_rectangle2 (rectangle, Row1, Column1, Phi, Len1, Len2)
*生成一个辅助矩形
dev_set_color ('blue')
gen_rectangle2 (Rectangle1, Row1, Column1,rad(0), Len1, Len2)
gen_cross_contour_xld (Cross, Row1, Column1, 20, 0.785398)
*求出辅助矩形的四个顶角
r1:=Row1-Len2
c1:=Column1-Len1
r2:=Row1-Len2
c2:=Column1+Len1
r3:=Row1+Len2
c3:=Column1+Len1
r4:=Row1+Len2
c4:=Column1-Len1

*根据点和角度,创建一个矩阵关系
vector_angle_to_rigid (Row1, Column1, rad(0), Row1, Column1, Phi, HomMat2D)
*对点进行仿射变换
affine_trans_point_2d (HomMat2D, r1, c1, r1, c1)
affine_trans_point_2d (HomMat2D, r2, c2, r2, c2)
affine_trans_point_2d (HomMat2D, r3, c3, r3, c3)
affine_trans_point_2d (HomMat2D, r4, c4, r4, c4)

R1:=[r1,r2,r3,r4]
C1:=[c1,c2,c3,c4]

dev_set_color ('green')
disp_cross (200000, R1, C1, 20, 45)
return ()
下面是hdev文件(第一种和第二张写法都在里面)
矩形顶点求解.zip (1.92 KB, 下载次数: 7, 售价: 10 视觉币)

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2020-12-11 15:04:28 | 显示全部楼层
效果还不错,楼主可以封装一个算子,输入图形就可以得出四个顶点,函数内部可以使用三角函数计算也是可以实现的!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表