VisionPro学习记录25-2接插件引脚缺陷检测

流程图连接图效果图

细节部分

图像处理

量化处理:其像素值进行离散化处理,即量化。去掉原本图中间黑的那部分

同时,要防止断裂,修改量化级别数

灰阶形态open操作:去掉毛刺,并且使图片更完整,

 膨胀操作:放断裂

 卡尺

卡到每两个插件

代码

  //1.图形集合
  CogGraphicCollection gc = new CogGraphicCollection();



    //2.
    CogBlobTool blob = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;  
    bool flag = true;
    gc.Clear();
    foreach( CogBlobResult b in  blob.Results.GetBlobs() )  {
        CogRectangleAffine rect = new CogRectangleAffine();
        rect = b.GetBoundingBox(CogBlobAxisConstants.Principal); //最小外接矩形   
        
        //针脚弯曲的判断----------------------------------
        double angle = Math.Abs(CogMisc.RadToDeg(b.Angle));    
        if( Math.Abs(angle - 90) > 5 )
        { 
          gc.Add(rect);   //添加到图形集合 
          flag = false;
        }    
        //针脚偏移-------------------------------------------
        double h = b.GetMeasure(CogBlobMeasureConstants.BoundingBoxExtremaAngleHeight); // ImageBoundHeight  
        if( b.CenterOfMassY < 250 ) {
          if(  h < 100 || h > 120 )  
          { rect.Color = CogColorConstants.Red;  
            gc.Add(rect);   //添加到图形集合 
            flag = false; 
          } } 
        else{  
          if(   h < 50 || h > 65 )  
          { 
            rect.Color = CogColorConstants.Magenta; 
            gc.Add(rect);   //添加到图形集合 
            flag = false;
          } }  
       //----------------------------------------------- 
    }
    
    //-------------------------------------
    CogCaliperTool c1 = mToolBlock.Tools["CogCaliperTool1"] as CogCaliperTool;  
    List<CogCaliperResult> cList1 = new List<CogCaliperResult>(); 
    for(int i = 0 ;i < c1.Results.Count ;i++)
    {
      cList1.Add(c1.Results[i]);
    } 
    cList1.Sort(( m,n) => { return m.PositionX.CompareTo(n.PositionX); });//按照x坐标从小到大排序  
    if(cList1[0].PositionX > 50) {   //检测左右两端是否有异常,以左边为例
      CogRectangleAffine rect = new CogRectangleAffine();
      rect.CenterX = cList1[0].PositionX / 2;
      rect.CenterY = cList1[0].PositionY;
      rect.SideXLength = cList1[0].PositionX - 10;
      rect.SideYLength = 200;
      rect.Color = CogColorConstants.Red; 
      gc.Add(rect); 
      flag = false;
    }
    //-----------中间的缺失针脚判断--------------------------
    for(int i = 0 ;i < cList1.Count - 1 ;i++)//计算间距
    {
      double dis = cList1[i + 1].PositionX - cList1[i].PositionX;
      if(dis > 80)
      {
        CogRectangleAffine rect = new CogRectangleAffine();
        rect.CenterX = (cList1[i + 1].PositionX + cList1[i].PositionX ) / 2;
        rect.CenterY = cList1[i].PositionY;
        rect.SideXLength = dis - 20;
        rect.SideYLength = 200;
        rect.Color = CogColorConstants.Red; 
        gc.Add(rect); 
        flag = false;
      }
    }
   //---------------------------------------
    CogGraphicLabel res = new CogGraphicLabel();
    res.Font = new Font("楷体", 20);
    if(flag)//正常
    {
      res.SetXYText(100, 100, "OK");
      res.Color = CogColorConstants.Green;
    }
    else //有缺陷
    {
      res.SetXYText(100, 100, "NG");
      res.Color = CogColorConstants.Red;
    }
    gc.Add(res);        
   //------------------------------------------







      mToolBlock.AddGraphicToRunRecord(c, lastRecord, "CogIPOneImageTool1.InputImage", ""); 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值