描述:因为halcon中算子求的矩形角度有时候不是我所需要的角度,以算子smallest_rectangle2为例:

1)其获取的矩形角度范围- 90< angle <= 90,即无论通过算子gen_rectangle2生成的Region角度多大,smallest_rectangle2获取的角度都不会超出这个范围。
2)算子smallest_rectangle2输出的角度是通过计算Region长轴与X轴正方向夹角获取,且角度不能超出限定范围。

这就会导致一个问题,由于我的得到的矩形长轴方向不是固定的,如果长轴是水平方向的,得到的矩形角度就在0°上下波动,如图红色区域部分:

如果长轴是竖直方向的,得到的矩形角度就在90°下或-90°上波动(因为- 90< angle <= 90,矩形垂直是90°。矩形区域逆时针旋转1°,并不是91°,而是-89°),如图红色区域部分:

所以,我通过计算矩形四个顶点,然后利用左上顶点与右下顶点的连线与X轴正方向的夹角来作为矩形的角度。具体算法如下:


一、求矩形四个顶点

gen_empty_obj (EmptyCross)
smallest_rectangle2_xld (outContour, Row1, Column1, Phi3, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle, Row1, Column1, Phi3, Length1, Length2)
tuple_cos (Phi3, Cos)
tuple_sin (Phi3, Sin)
dev_set_color('green')
a:= -Length1*Cos - Length2*Sin
b := -Length1*Sin + Length2*Cos
gen_cross_contour_xld(Cross, Row1-b,  Column1+a, 10, Phi3)
concat_obj (EmptyCross, Cross, EmptyCross)
c := Length1*Cos - Length2*Sin
d := Length1*Sin + Length2*Cos
gen_cross_contour_xld(Cross, Row1-d, Column1+c, 10, Phi3)
concat_obj (EmptyCross, Cross, EmptyCross)
e:= Length1*Cos + Length2*Sin
f := Length1*Sin - Length2*Cos
gen_cross_contour_xld(Cross, Row1-f, Column1+e, 10, Phi3)
concat_obj (EmptyCross, Cross, EmptyCross)
g := -Length1*Cos + Length2*Sin
h := -Length1*Sin - Length2*Cos
gen_cross_contour_xld(Cross, Row1-h, Column1+g, 10, Phi3)
concat_obj (EmptyCross, Cross, EmptyCross)

tips:这里将四个顶点以十字轮廓的形式保存在空对象EmptyCross内。


二、对矩形四个顶点进行排序并找到左上顶点和右下顶点

area_center_points_xld (EmptyCross, Area3, Row2, Column2)
tuple_length (Column2, Length)
for Index1 := 0 to Length-1 by 1
for Index := 0 to Length-1 by 1if(Index<Length-1)if(Row2[Index]+Column2[Index]>Row2[Index+1]+Column2[Index+1])      RowTemp := Row2[Index]ColumnTemp := Column2[Index]Row2[Index] := Row2[Index+1]Column2[Index] := Column2[Index+1]Row2[Index+1] := RowTempColumn2[Index+1] := ColumnTempendif endif
endfor
endfor

tips:因为左上顶点的行、列坐标之和一定是最小的,右下顶点的行、列坐标之和一定是最大的,通过冒泡排序完成矩形四个顶点数组的排序。


三、计算矩形左上顶点和右下顶点连线与X轴正方向的夹角

offsetX := Column2[3] - Column2[0]
offsetY := Row2[3] - Row2[0]
tuple_atan2 (offsetY, offsetX, angel)
tuple_deg (angel, angelDeg)
RectAngel := 180 - angelDeg

tips:矩形左上顶点坐标(Row2[0],Column2[0]),右下顶点坐标(Row2[3],Column2[3])。

结果:


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。

[Halcon几何] 矩形顶点和对角连线角度计算相关推荐

  1. halcon中如何生成椭圆_Halcon中关于角度计算和测量拟合的算子详解

    角度计算算子简介 1.计算直线与水平轴之间的夹角 angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 角度计算方式:将直线看作向量(有方向性),以直 ...

  2. halcon找矩形顶点的一种方法

    主程序: read_image (Image11, '11')*画仿射矩形 dev_set_color ('green') draw_rectangle2 (3600, Row, Column, Ph ...

  3. canvas线性渐变实现:根据渐变线角度计算坐标x0,y0,x1,y1

    背景 某些情况下可能需要使用canvas实现线性渐变,需求是渐变色恰好填充整个画布,并且渐变的方向不是水平或垂直的,而是任意角度的,举个css3实现的栗子: background: linear-gr ...

  4. OpenCV中minAreaRect()最小外接矩形 cvBoxPoints()计算矩形顶点 RotatedRect和CvBox2D详解

    minAreaRect()函数计算并返回指定点集的最小区域边界斜矩形. RotatedRect minAreaRect(InputArray points) points:输入信息,可以为包含点的容器 ...

  5. OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的线和圆

    OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的线和圆 来自约束的线和圆 约束类型 可用的线和圆类型 外观/内饰 线的方向 与两个圆相切的线 给定半径的圆与两个圆 ...

  6. 使用MATLAB求图像的形心、外接矩形顶点坐标并标记

    使用MATLAB求图像的形心.外接矩形顶点坐标并标记 1. 求图像形心使用自带函数regionprops标记 2. 求图像外接矩形顶点坐标并标记 欢迎学习交流! 邮箱: z-@1-6.com 网站: ...

  7. Halcon几何定位

    Halcon几何定位Halcon几何定位Halcon几何定位 建模经验 知道什么是关键轮廓]什么是干扰轮廓 边缘数量越少越好,边缘数量多了,速度会变慢 边缘越长越好 干扰边越少越好 关键边缘越多越好, ...

  8. PCB走线角度为90度到底行不行?

    关注.星标公众号,直达精彩内容 现在但凡打开SoC原厂的pcb Layout Guide,都会提及到高速信号的走线的拐角角度问题,都会说高速信号不要以直角走线,要以45度角走线,并且会说走圆弧会比45 ...

  9. 抛物线、导弹线轨迹计算

    抛物线轨迹计算 不同输入情况下的抛物线有不同计算方式.为了保证飞行时间的一致,水平初速度和起点两个参数是任何情况下都需要的. 三.示例代码 void UParabolicMovementCompone ...

最新文章

  1. 11、集合--Set接口
  2. 设计模式:设计模式七大原则之迪米特法则
  3. std::get(std::tuple)
  4. 005 Android之数据存储
  5. python获取工作日_python – 获取下一个工作日的日期
  6. 光伏市场抢装潮6月底前或重现
  7. 奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线
  8. 1022 D进制的A+B (20 分)—PAT (Basic Level) Practice (中文)
  9. 管理感悟:一偷懒,必出错
  10. HCNA-Storage (H13-611)题库 v4.0
  11. 仿《91创业网》网站源码 招商加盟致富商机网站 帝国cms模版+采集
  12. Python定时向微信发送天气消息和每日一言[wxpy、apscheduler]
  13. IEEE调研报告:父母关于人工智能对儿童的影响的看法
  14. A dependency may only have one source.
  15. OpenCV开发笔记(六十五):红胖子8分钟带你深入了解ORB特征点(图文并茂+浅显易懂+程序源码)
  16. 夯实云端协同平台建设,橙色云CDS助力中小企业转型升级
  17. 案例:淘宝点击关闭二维码
  18. 如何证明服从卡方分布_卡方分布的重要定理x拔与s∧2相互独立
  19. win10中搭建并配置ftp服务器的方法(实现多用户登录整合版)
  20. 论文笔记(十七):Brax - A Differentiable Physics Engine for Large Scale Rigid Body Simulation

热门文章

  1. eclipse新建类auther自填充
  2. 按键精灵获取服务器信息,按键精灵获取窗口信息脚本源码
  3. 斐讯R1音箱安装悟空遥控,并实现DLNA推送
  4. 【光学】Matlab模拟几何光学中的球差、彗差、像散、场曲四种像差
  5. 查看本机mac地址/ ipconfig /all 的一点笔记
  6. codeforces 645F Cowslip Collections
  7. 贝叶斯算法应用于反垃圾邮件
  8. web端与移动端高德地图接入及实例化
  9. 移动端H5实现手动选择地图点的一种解决方案
  10. 用java简单画一条线