在halcon如何求出任意矩形的四个顶角位置?我这里写了两种比较常见的写法!原理是通过三角函数计算
1.第一种写法我是用三角函数进行计算求出
2.第二种是利用halcon自带的仿射变换得出,通过矩阵关系,然后仿射点的关系而得出的
原图:
处理后的结果:
这里将为大家免费展示的是第二种写法,也就是通过仿射关系求出,比较简单
*生成两个矩形(一个是平行于轴的矩形,不带角度的,另一个是带角度的矩形)
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, 下载次数: 3, 售价: 10 视觉币)
|