VisionPro学习记录28-2多齿轮齿数检测

流程图连接图效果图

 

 细节部分

思路见前面流程图,重点是如何用脚本实现。

注释掉自动运行工具的代码 ,因为部分工具等待脚本调用

CogGraphicCollection gc = new CogGraphicCollection(); //添加图形集合




CogSobelEdgeTool sobel = mToolBlock.Tools["CogSobelEdgeTool1"] as  CogSobelEdgeTool;
    sobel.Run();//1.运行边缘提取工具
    
    CogBlobTool blob1 = mToolBlock.Tools["CogBlobTool1"] as  CogBlobTool;
    blob1.Run();//2.运行斑点工具
    
    
    CogDistancePointPointTool dis = mToolBlock.Tools["CogDistancePointPointTool1"] as  CogDistancePointPointTool;
    
    CogCopyRegionTool copy = mToolBlock.Tools["CogCopyRegionTool1"] as  CogCopyRegionTool;//获取copyRegion工具
    
    
    CogBlobTool blob2 = mToolBlock.Tools["CogBlobTool2"] as  CogBlobTool;
      
    
    gc.Clear();//每次运行 清空图形集合
    
    //处理每个斑点的信息
    for(int i = 0;i < blob1.Results.GetBlobs().Count ;  i++)//blob1.Results.GetBlobs().Count斑点个数
    {
      
      //定义数组 用于存放距离
      ArrayList disList = new  ArrayList();
      disList.Clear(); 
      //获取边缘 获取每个顶点 计算顶点到圆心的距离 并从小到大进行排序 取N个值计算均值 以均值作为填补圆的半径
      //1.获取边缘和质心
      double center_x = blob1.Results.GetBlobs()[i].CenterOfMassX;
      double center_y = blob1.Results.GetBlobs()[i].CenterOfMassY; 
      CogPolygon p = blob1.Results.GetBlobs()[i].GetBoundary(); //获取某个斑点的边缘的多边形
      for(int no = 0;no < p.NumVertices ;no++) //获取每个顶点的信息
      {
        dis.StartX = p.GetVertexX(no);
        dis.StartY = p.GetVertexY(no);
        dis.EndX = center_x;
        dis.EndY = center_y;
        dis.Run();//2.计算  顶点到圆心的距离
        disList.Add(dis.Distance);//3.把距离加入列表
      }
      //4.排序 从小到大排序
      disList.Sort();
      
      int Num = 100; 
      double sum = 0;//和
      double r = 0;
      //5.取前面的Num个值 假定 Num=100 求平均
      if( disList.Count >= Num )
      {
        for(int j = 0; j < Num; j++)
        {
          sum += (double ) disList[j];
        }
        r = sum / Num;  //6. 半径
      } 
      
      //得到半径之后,填补
      ((CogCircle) copy.Region).CenterX = center_x;
      ((CogCircle) copy.Region).CenterY = center_y;
      ((CogCircle) copy.Region).Radius = r;  //***** 最关键的部分
      copy.Run();//运行 copyregion工具
      
      //对每个斑点进行一下 blob分析
      blob2.Region = p;//每个斑点   ******  
      blob2.Run(); 
      
      //显示  blob2的结果数取出 并且进行显示 添加label框 
      CogGraphicLabel lb = new CogGraphicLabel(); 
      lb.X = blob1.Results.GetBlobs()[i].CenterOfMassX; //放置坐标  质心 
      lb.Y = blob1.Results.GetBlobs()[i].CenterOfMassY; //放置坐标  质心
      lb.Color = CogColorConstants.Red;
      lb.Font = new Font("楷体", 10); 
      lb.Text = "齿数:" + blob2.Results.GetBlobs().Count.ToString();
      gc.Add(lb);  
 
    }








    foreach( ICogGraphic item in gc )
       mToolBlock.AddGraphicToRunRecord(item, lastRecord, "CogSobelEdgeTool1.InputImage", ""); 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值