VisionPro学习日志(五)

VisionPro学习日志(五)

案例1:多目标检测(动态使用卡尺)

检测流程:首先使用斑点工具,显示出每一个白色矩形框,然后使用卡尺工具测量每一个黑框的高度。

image-20230809092904017

image-20230809093040671

#region namespace imports
using System;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro3D;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.Caliper;
using System.Collections.Generic; //添加泛型引用 

#endregion

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  #region Private Member Variables
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
   List<CogGraphicLabel>  labels = new List<CogGraphicLabel>();
  #endregion

  /// <summary>
  /// Called when the parent tool is run.
  /// Add code here to customize or replace the normal run behavior.
  /// </summary>
  /// <param name="message">Sets the Message in the tool's RunStatus.</param>
  /// <param name="result">Sets the Result in the tool's RunStatus</param>
  /// <returns>True if the tool should run normally,
  ///          False if GroupRun customizes run behavior</returns>
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    // To let the execution stop in this script when a debugger is attached, uncomment the following lines.
    // #if DEBUG
    // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();
    // #endif


    // Run each tool using the RunTool function
    foreach(ICogTool tool in mToolBlock.Tools)
      mToolBlock.RunTool(tool, ref message, ref result);
    
    
    //2.获取斑点信息 
    CogBlobTool blobTool = mToolBlock.Tools["CogBlobTool1"]  as  CogBlobTool;
    //斑点集合
    CogBlobResultCollection blobResults = blobTool.Results.GetBlobs()  as CogBlobResultCollection; //斑点的集合
    //获取卡尺工具
    
    CogCaliperTool caliperTool = mToolBlock.Tools["CogCaliperTool1"]  as  CogCaliperTool;  //获取卡尺工具
    //设置卡尺的中心点 之前需要获取区域信息 
    
    CogRectangleAffine caliperRegion = caliperTool.Region  as CogRectangleAffine; //仿射矩形  caliperRegion 卡尺的区域
    
    labels.Clear();//清空列表
    
    foreach(CogBlobResult blob in  blobResults)
    {
      caliperRegion.CenterX = blob.CenterOfMassX;      //斑点的质心
      caliperRegion.CenterY = blob.CenterOfMassY;
      //运行卡尺
      mToolBlock.RunTool(caliperTool, ref message, ref result);  //运行卡尺工具 
      
      CogGraphicLabel myLabel = new CogGraphicLabel();//定义一个图形标签
      if( caliperTool.Results.Count > 0 )
      {
        myLabel.SetXYText(blob.CenterOfMassX, blob.CenterOfMassY, "Good");
        myLabel.Color = CogColorConstants.Green;
      }
      else
      {
        myLabel.SetXYText(blob.CenterOfMassX, blob.CenterOfMassY, "Bad");
        myLabel.Color = CogColorConstants.Red;
      } 
      labels.Add(myLabel); //添加到列表当中 
    } 
    return false;
  }

  #region When the Current Run Record is Created
  /// <summary>
  /// Called when the current record may have changed and is being reconstructed
  /// </summary>
  /// <param name="currentRecord">
  /// The new currentRecord is available to be initialized or customized.</param>
  public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord)
  {
  }
  #endregion

  #region When the Last Run Record is Created
  /// <summary>
  /// Called when the last run record may have changed and is being reconstructed
  /// </summary>
  /// <param name="lastRecord">
  /// The new last run record is available to be initialized or customized.</param>
  public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
  {
    foreach(CogGraphicLabel label  in  labels )
    {
      mToolBlock.AddGraphicToRunRecord(label, lastRecord, "CogBlobTool1.InputImage", "");
    } 
  }
  #endregion

  #region When the Script is Initialized
  /// <summary>
  /// Perform any initialization required by your script here
  /// </summary>
  /// <param name="host">The host tool</param>
  public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
  {
    // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
    base.Initialize(host);


    // Store a local copy of the script host
    this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));
  }
  #endregion

}

案例2:圆形瓶口缺陷检测

image-20230812115943628

最后结果不满意:无法精确到分辨缺陷。对于缺陷的尺寸没法正确标注。

image-20230812120255889

案例3:检测球形轴承的安装错误(重新复盘学习,后续会补充)

使用原图的模板,会出现无法识别到实例的情况。

解决思路:对原图进行预处理,然后降噪。让原图中的精细特征变多(有点类似于Halcon重新处理模板的图像,让模板的像素特征更加精确)。

案例4:圆形文字识别

image-20230812121428441

image-20230812121456279

原先可能会出现沿着水平轴展开是相反的情况

修改起始角度即可:

image-20230812121539828

posted @ 2023-08-21 08:55  聆听微风  阅读(326)  评论(0编辑  收藏  举报