Hacon的仿射变换以后矩形框的角度转为VM的的矩形框的角度表达
背景描述:1.halcon的角度范围0到360;2.vm的角度范围-180到180.

A.背景描述:

1.halcon的角度范围0到360; 2.vm的角度范围-180到180。


B.主要难点是:

1.halcon是弧度制,VM是角度制,注意要单位转换为相同的,因为是转为VM的,所以下面都用角度制表达的。

2.因为Halcon是0到360度,所以Halcon只有一个方向;而VM是-180到180,如果画一个直角坐标系,就会发现有两个方向,即0到180 和 0到-180两个方向。所以,需要考虑两个情况,基准值大于等于0 和 基准值小于等于0。


C.方法:

1.基于上面的难点,写了下面的方法,经过旋转产品一圈,测试是OK的。注意测试,要用有意义的测试,即角度一定要这样才可以,比如OCR的识别,或者查找直线的区域。不要用Blob或者查找模版的算子

2.下面矩形框的基准值,表示的是做基准时的VM角度基准值,注意,我这里基准值和Halcon的基准值正好是反的,注意要把Halcon的角度值取反。

3.矩形框的旋转角度是halcon的旋转角度,

4.方法返回的值就是VM里面矩形框在旋转以后的角度。

5.下面是具体实现的方法:

/// <summary>
/// 求旋转后矩形框的角度
/// </summary>
/// <param name="baseangle">矩形框的基准角度</param>
/// <param name="angle">矩形框的旋转角度</param>
/// <returns></returns>
public double ConvertAngleToMinus180To180(double baseangle,double angle)
{
double a = 0;
if (baseangle>=0) //如果 矩形框的基准角度 大于零
{
if (angle <= (360 -(180- baseangle))) //即假设矩形框的基准角度是60度,则矩形框最多还能120度 负值可以到180
{
   a= baseangle - angle;
}
else
{
   double a1= (180 - baseangle); //最大的正直
   double a2 = angle-(180 + baseangle); //超过负值的部分 这部分要计入正直
   a =(a1-a2) +baseangle;
}
}
else if (baseangle < 0) //如果 矩形框的基准角度 小于零 -95
{
if (angle<=(180-Math.Abs(baseangle))) //负值的范围
{
a = baseangle - angle;
}
else
{
double a1 = 180-Math.Abs(baseangle); // 负值方向的值
double a2 = angle - a1; // 80
a= (180-a2);
}
}
return a;
}

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

Vm算子CMvdImage图片生成方法,即IntPtr转byte[]和byte[]

下一篇

【使用2D相机+VM实现3D抓放】复合机器人光伏某场景上下料项目

评论请先登录 登录
全部评论 1

谢谢分享知识

2024-05-21 08:46:09 江苏省
回复
  • 1
Lv.0
2
关注
11
粉丝
7
创作
42
获赞
相关阅读
  • 探讨海康VisionMasterN点标定的内部原理
    2024-07-19 浏览 0
  • 关于两起激光方案配置不合理引起的碰撞案例分析
    2024-07-09 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器