当前位置: 首页 > article >正文

(Halcon)轮廓等分切割(项目分析)

目标:获取绿色圆所在位置(可用于点焊/点胶引导)

实现思路

一,相机标定板标定(如果实战用于点焊/点胶引导需要做图像畸变校正以减小误差)

      相机标定

      如何做一个C#仿Halcon Calibration插件-CSDN博客

二,九点标定(图像位姿与点焊/点胶坐标转换)

三,获取指定位置全部轮廓  segment_contours_xld

四,get_contour_global_attrib_xld  获取Attrib值,通过值判定拟合类型

       详情可以参考之前博客

       Halcon XLD轮廓分割_halcon轮廓分割-CSDN博客

五,轮廓拟合(直线/圆/椭圆)获取每个轮廓的端点/半径/起始角度信息

六,获取所有轮廓的长度信息

七,创建列表保存所有信息

八,判定长度信息与落点位置(例如黄色轮廓不满足两次落点间隔,则粉色轮廓的初次落点位置为(指定间隔长度-黄色轮廓长度)以此类推,直至落点布满全部轮廓)

难点解析

指定点在指定直线指定间隔平移 与  指定点在圆弧上指定间隔平移

一,指定点在指定直线指定间隔平移

解决方法,线性代数

Row      初始行坐标
Column   初始列坐标
Length   直线偏移距离
num      可绘制点数

for Index := 0 to num by 1
    Rnew:=-Length*sin(Angle)*Index+Row
    Cnew:=Length*cos(Angle)*Index+Column
    gen_cross_contour_xld (Cross1, Rnew, Cnew, 6, Angle)
endfor

二,指定点在圆弧上指定间隔平移

解决方案,旋转矩阵

实现效果

更改分割间隔

C#分割测试代码

private void btn_Seg1_Click(object sender, EventArgs e)
{

    showWorkMsg(listView1, "计时开始", Color.Tan);
    HObject ho_Cross=null, ho_Cross1 = null;
    HTuple  hv_HomMat2DIdentity = new HTuple(), hv_HomMat2DTranslate = new HTuple(), hv_HomMat2DRotate = new HTuple();
    HTuple hv_R1 = new HTuple(), hv_C1 = new HTuple();

    HTuple hv_R = new HTuple(),hv_C = new HTuple();
    HOperatorSet.GenEmptyObj(out ho_Cross1);
    HOperatorSet.GenEmptyObj(out ho_Cross);
    
    //获取长度
    double ClipLength = Convert.ToDouble(tbx_length.Text);
    //获取分割数量

    int NumCilp = Convert.ToInt32(Math.Floor(Length / ClipLength));
    //获取单个角度
    double AngleStep = (hv_end_angle.D - hv_start_angle.D) / NumCilp;
    //X偏移
    double X = ((-hv_ra) * (hv_start_angle.TupleSin()));
    //Y偏移
    double Y = (hv_ra * (hv_start_angle.TupleCos()));
    //创建矩阵
    hv_HomMat2DIdentity.Dispose();
    HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
    hv_HomMat2DTranslate.Dispose();
    HOperatorSet.HomMat2dTranslate(hv_HomMat2DIdentity, X, Y, out hv_HomMat2DTranslate);

    hv_R.Dispose();
    hv_R = new HTuple();
    hv_C.Dispose();
    hv_C = new HTuple();
    //循环获取点和轮廓
    for (int i = 0; i < NumCilp+1; i++) 
    {
        hv_HomMat2DRotate.Dispose();
        HOperatorSet.HomMat2dRotate(hv_HomMat2DTranslate, i * AngleStep , hv_R_Centr,
            hv_C_Centr, out hv_HomMat2DRotate);

        hv_R1.Dispose(); hv_C1.Dispose();
        HOperatorSet.AffineTransPoint2d(hv_HomMat2DRotate, hv_R_Centr, hv_C_Centr,
            out hv_R1, out hv_C1);
        ho_Cross1.Dispose();
        HOperatorSet.GenCrossContourXld(out ho_Cross1, hv_R1, hv_C1, 60, 0.785398);
        HOperatorSet.ConcatObj(ho_Cross, ho_Cross1,out ho_Cross);

        HTuple ExpTmpLocalVar_R = hv_R.TupleConcat(hv_R1);
        hv_R.Dispose();
        hv_R = ExpTmpLocalVar_R;

        HTuple ExpTmpLocalVar_C = hv_C.TupleConcat(hv_C1);
        hv_C.Dispose();
        hv_C = ExpTmpLocalVar_C;
        double rrr = Convert.ToDouble(hv_R1.D);
        double ccc = Convert.ToDouble(hv_C1.D);
        showWorkMsg(listView1,"R:"+ rrr.ToString("0.000") +"  ,   C:"+ ccc.ToString("0.000"), Color.Teal);

        
    }
    HW.DispObj(ho_Cross);
    
    showWorkMsg(listView1, hv_R.ToString(), Color.Teal);
    showWorkMsg(listView1, hv_C.ToString(), Color.Teal);
    showWorkMsg(listView1, "计时结束", Color.Tan);
   
}


http://www.kler.cn/a/519372.html

相关文章:

  • 【大数据】机器学习----------强化学习机器学习阶段尾声
  • Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好
  • 【Matlab高端绘图SCI绘图模板】第05期 绘制高阶折线图
  • 基于模糊PID的孵化箱温度控制系统(论文+源码)
  • MATLAB提供的颜色映射表colormap——伪彩色
  • 【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构
  • 性能优化案例:通过合理设置spark.storage.memoryFraction参数的值来优化PySpark程序的性能
  • Flutter_学习记录_Tab的简单Demo~真的很简单
  • 【开源免费】基于SpringBoot+Vue.JS智慧图书管理系统(JAVA毕业设计)
  • 【DB】Oracle存储过程
  • doris:MySQL Load
  • 【2025年数学建模美赛E题】(农业生态系统)完整解析+模型代码+论文
  • Vue.js 路由懒加载
  • 【STM32项目实战系列】了解ST系列MCU外设:定时器TIM
  • HTML-新浪新闻-实现标题-排版
  • WPS计算机二级•幻灯片的页面布局
  • 【unity游戏开发之InputSystem——07】InputSystem+UGUI配合使用(基于unity6开发介绍)
  • 【问题解决】el-upload数据上传成功后不显示成功icon
  • C++红黑树详解
  • 参数是模型学会的东西,预训练是让它学习的东西
  • 【C/C++】C++中使用vector存储并遍历数据
  • 【数据结构】_以单链表为例分析各种方法实现的特殊情况考虑思路
  • git基础指令大全
  • 题海拾贝:力扣 232.用栈实现队列
  • 如何在Spring Boot项目中高效集成Spring Security
  • 前端开发中的新兴技术:Web Components 实战应用