C#与halcon联合(4)点距两线角度,交点算子知悉

1.线线之间夹角弧度值

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)

设置绘画颜色和线条宽度
然后用draw_line绘画第一条线
这里要知道绘画的起点和终点
Row1,Column1–起点
Row2,Column2–终点

绘画的第二条线的起点和终点如下
Row11,Column11–起点
Row21,Column21–终点

在使用angle_ll获得两线夹角的弧度值Angle
在由下面换算成角度

hv_Angle = 1.0 * Angle/3.14 *360;//角度与弧度换算

halcon中绘画的第二条线与坐标正向横轴的夹角弧度值
用以下算子计算

angle_lx (Row11, Column11, Row21, Column21, Angle1)

2.线线之间的交点

找到第一条线和第二条线的交点并且显示出来
用红色的十字叉显示出来

intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)

效果如下图所示
在这里插入图片描述

3.点到线的距离

绘画第三条直线,利用前面的交点通过算子计算
点到线的距离,并且打印出来

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)

在这里插入图片描述

4.点到点之间的距离

求出第二条线和第三条线的交点2
与之前第一条线和第二条线的交点1
通过算子求点到点的距离

intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)

效果如下图所示
在这里插入图片描述
以上算子较为常用,我们熟练即可。

5.halcon总操作代码如下

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)
angle_lx (Row11, Column11, Row21, Column21, Angle1)
intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)
intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)

6.转换成C#的代码

private void action()
  {


    // Local iconic variables 

    HObject ho_RegionLines, ho_RegionLines1, ho_Cross;
    HObject ho_RegionLines2, ho_Cross1;

    // Local control variables 

    HTuple hv_Row1 = null, hv_Column1 = null, hv_Row2 = null;
    HTuple hv_Column2 = null, hv_Row11 = null, hv_Column11 = null;
    HTuple hv_Row21 = null, hv_Column21 = null, hv_Angle = null;
    HTuple hv_Angle1 = null, hv_Row = null, hv_Column = null;
    HTuple hv_IsParallel = null, hv_Row12 = null, hv_Column12 = null;
    HTuple hv_Row22 = null, hv_Column22 = null, hv_Distance = null;
    HTuple hv_Distance1 = null;
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_RegionLines);
    HOperatorSet.GenEmptyObj(out ho_RegionLines1);
    HOperatorSet.GenEmptyObj(out ho_Cross);
    HOperatorSet.GenEmptyObj(out ho_RegionLines2);
    HOperatorSet.GenEmptyObj(out ho_Cross1);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
    }
    HOperatorSet.DrawLine(3600, out hv_Row1, out hv_Column1, out hv_Row2, out hv_Column2);
    ho_RegionLines.Dispose();
    HOperatorSet.GenRegionLine(out ho_RegionLines, hv_Row1, hv_Column1, hv_Row2, 
        hv_Column2);
    HOperatorSet.DrawLine(3600, out hv_Row11, out hv_Column11, out hv_Row21, out hv_Column21);
    ho_RegionLines1.Dispose();
    HOperatorSet.GenRegionLine(out ho_RegionLines1, hv_Row11, hv_Column11, hv_Row21, 
        hv_Column21);
    HOperatorSet.AngleLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11, hv_Column11, 
        hv_Row21, hv_Column21, out hv_Angle);
    HOperatorSet.AngleLx(hv_Row11, hv_Column11, hv_Row21, hv_Column21, out hv_Angle1);
    HOperatorSet.IntersectionLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11, 
        hv_Column11, hv_Row21, hv_Column21, out hv_Row, out hv_Column, out hv_IsParallel);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
    }
    ho_Cross.Dispose();
    HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row, hv_Column, 100, 0.785398);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
    }
    HOperatorSet.DrawLine(3600, out hv_Row12, out hv_Column12, out hv_Row22, out hv_Column22);
    ho_RegionLines2.Dispose();
    HOperatorSet.GenRegionLine(out ho_RegionLines2, hv_Row12, hv_Column12, hv_Row22, 
        hv_Column22);
    HOperatorSet.DistancePl(hv_Row, hv_Column, hv_Row12, hv_Column12, hv_Row22, hv_Column22, 
        out hv_Distance);
    HOperatorSet.SetTposition(3600, hv_Row, hv_Column);
    HOperatorSet.WriteString(3600, hv_Distance);
    HOperatorSet.IntersectionLl(hv_Row11, hv_Column11, hv_Row21, hv_Column21, hv_Row12, 
        hv_Column12, hv_Row22, hv_Column22, out hv_Row2, out hv_Column2, out hv_IsParallel);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
    }
    ho_Cross1.Dispose();
    HOperatorSet.GenCrossContourXld(out ho_Cross1, hv_Row2, hv_Column2, 100, 0.785398);
    HOperatorSet.DistancePp(hv_Row1, hv_Column1, hv_Row2, hv_Column2, out hv_Distance1);
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
    }
    if (HDevWindowStack.IsOpen())
    {
      HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
    }
    HOperatorSet.SetTposition(3600, hv_Row2, hv_Column2);
    HOperatorSet.WriteString(3600, hv_Distance1);



    ho_RegionLines.Dispose();
    ho_RegionLines1.Dispose();
    ho_Cross.Dispose();
    ho_RegionLines2.Dispose();
    ho_Cross1.Dispose();

  }

下一次的进阶任务:
模型匹配,通过两种不同的矩形框,找到模型,并且应用匹配

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱搞事的程小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值