VisionPro二次开发学习笔记9-使用 CogRecordDisplay控件

使用 CogRecordDisplay控件

这个示例展示了如何使用 CogRecordDisplay 在表单上显示 Blob Tool 的 LastRunRecord 图形。
它还演示了如何通过 BlobTool 的 LastRunRecordEnable 属性有选择性地启用或禁用不同的图形特性。这个模式可以应用于所有 VisionPro 工具。

具体步骤如下:

1. 添加引用

using Cognex.VisionPro;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.Exceptions;
using Cognex.VisionPro.ImageFile;

2. 界面设计

1. 新建Windows窗体
2. 添加TabControl控件,增加3个Tabpage.
3. tab1添加CogRecordDisplay控件和2个Button按钮,用于显示图像,运行关闭程序,添加GroupBox,增加3个CheckBox.

在这里插入图片描述

4. tab2 添加CogImageFileEditV2控件

在这里插入图片描述

5. tab3 添加CogBlobEditV2控件

在这里插入图片描述

3. 加载图像和视觉工具图形选中状态

        private CogImageFileTool CogImageFileTool;
        private CogBlobTool BlobTool;
        private void InitializeDisplay()
        {
            string sImageFile = Environment.GetEnvironmentVariable("VPRO_ROOT");
            try
            {
                if (sImageFile == "")
                {
                    throw new Exception("环境变量VPRO_ROOT未配置");
                }
                sImageFile += @"\images\bracket_std.idb";

                CogImageFileTool = cogImageFileEditV21.Subject;
                CogImageFileTool.Operator.Open(sImageFile, CogImageFileModeConstants.Read);

                BlobTool = cogBlobEditV21.Subject;
                BlobTool.Changed += BlobTool_Changed;
                BlobTool.Ran += BlobTool_Ran;

                BlobTool.DataBindings.Add("InputImage", CogImageFileTool, "OutputImage");

                CogImageFileTool.Run();
                BlobTool.Run();

                SyncGraphicsControls();
            }
            catch (CogFileOpenException ex)
            {
                DisplayErrorAndExit(ex.GetType().ToString(), "Caught exception:" + ex.Message + Environment.NewLine + "File" + sImageFile + "is not found");
                this.Dispose(true);
            }
            catch (CogException ex)
            {
                DisplayErrorAndExit(ex.GetType().ToString(), "Caught Cognex exception:" + ex.Message);
                this.Dispose(true);
            }
            catch (Exception ex) {
                DisplayErrorAndExit(ex.GetType().ToString(),"Caught System exception:"+ex.Message);
                this.Dispose(true);
            }
        }

        private void DisplayErrorAndExit(string errorType, string message)
        {
            MessageBox.Show(message,"GraphicsRecord",MessageBoxButtons.OK);
            this.Close();
        }

        private void SyncGraphicsControls()
        {
            chkShowBoundingBox.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle) != 0;

            chkShowBoundary.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundary) != 0;

            chkShowCOM.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsCenterOfMass) != 0;
        }

4. 订阅Blob工具Ran和Change事件

            //处理 Blob 工具运行后的事件。如果运行结果不是接受状态,则显示消息框
            private void BlobTool_Ran(object sender, EventArgs e)
            {
                if (BlobTool.RunStatus.Result!=CogToolResultConstants.Accept)
                {
                    MessageBox.Show(BlobTool.RunStatus.Message,"GraphicsRecord");
                }
            }
            //处理 Blob 工具状态变化的事件 检查是否更新了图形记录。如果更新了,创建最后一次运行记录并更新显示
            private void BlobTool_Changed(object sender, Cognex.VisionPro.CogChangedEventArgs e)
            {
                bool GraphicsRecordUpdated = false;

                if ((e.StateFlags & CogBlobTool.SfLastRunRecordEnable)!=0)
                {
                    SyncGraphicsControls();
                    GraphicsRecordUpdated = true;
                }

                if ((e.StateFlags & CogBlobTool.SfCreateLastRunRecord) != 0) {
                    GraphicsRecordUpdated = true;
                }

                if (GraphicsRecordUpdated)
                {
                    ICogRecord lastRunRecord = BlobTool.CreateLastRunRecord();

                    if (lastRunRecord!=null && lastRunRecord.SubRecords.ContainsKey("InputImage"))
                    {
                        cogRecordDisplay1.Record = lastRunRecord.SubRecords["InputImage"];
                        cogRecordDisplay1.Fit(true);
                    }
                    else
                    {
                        cogRecordDisplay1.Record = null;
                    }
                }
            }

5. 处理按钮点击事件

        private void button1_Click(object sender, EventArgs e)
            {
                if (CogImageFileTool!=null)
                {
                    CogImageFileTool.Run();
                }
                if (BlobTool!=null)
                {
                    BlobTool.Run();
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                this.Close();
            }

6. 处理视觉工具图形选择改变事件

        private void chkShowBoundingBox_CheckedChanged(object sender, EventArgs e)
            {
                SetLastRunRecordEnableFlag(chkShowBoundingBox.Checked,CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle);
            }

            

            private void chkShowBoundary_CheckedChanged(object sender, EventArgs e)
            {
                SetLastRunRecordEnableFlag(chkShowBoundary.Checked,CogBlobLastRunRecordConstants.ResultsBoundary);
            }

            private void chkShowCOM_CheckedChanged(object sender, EventArgs e)
            {
                SetLastRunRecordEnableFlag(chkShowCOM.Checked,CogBlobLastRunRecordConstants.ResultsCenterOfMass);
            }
            //当复选框的状态变化时,调用SetLastRunRecordEnableFlag方法更新 Blob 工具的图形记录启用标志。
            //SetLastRunRecordEnableFlag方法根据复选框的选中状态启用或禁用 Blob 工具的特定图形特性
            private void SetLastRunRecordEnableFlag(bool enabled, CogBlobLastRunRecordConstants flag)
            {
                if (enabled)
                {
                    BlobTool.LastRunRecordEnable |= flag;

                }
                else
                {
                    BlobTool.LastRunRecordEnable &= ~flag;
                }
            }

7. 界面效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

扩展

CogBlobLastRunRecordConstants 是 Cognex VisionPro 框架中定义的一组常量,用于指示 Blob 工具在运行时生成的图形记录的不同特性。这些常量可以用来启用或禁用特定的图形结果记录,以便在后续的分析或显示中使用。

常见常量

以下是一些可能的 CogBlobLastRunRecordConstants 常量及其说明(具体常量可能根据 Cognex 的版本有所不同):

  1. ResultsBoundingBoxExtremaAngle:

    • 表示生成的图形记录中包含边界框的极值角度信息。
    • 适用于需要显示对象的边界信息的场景。
  2. ResultsBoundary:

    • 表示生成的图形记录中包含边界的详细信息。
    • 可用于在图像上显示检测到的物体的边界轮廓。
  3. ResultsCenterOfMass:

    • 表示生成的图形记录中包含对象的质心位置。
    • 在需要分析物体位置或重心的应用中非常有用。

如何使用这些常量

CogBlobLastRunRecordConstants 常量通常在以下场景中使用:

  1. 启用或禁用图形特性:

    • 在用户界面中,可以通过复选框或其他控件让用户选择要显示的图形特性。
    • 根据用户的选择,更新 BlobTool.LastRunRecordEnable 属性。例如:
      if (enabled)
      {
          BlobTool.LastRunRecordEnable |= CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle;
      }
      else
      {
          BlobTool.LastRunRecordEnable &= ~CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle;
      }
      
    • 以上代码片段表示如果用户启用边界框特性,就将该常量添加到 LastRunRecordEnable 中;如果用户禁用,则将其移除。
  2. 在图形同步中使用:

    • 当运行 Blob 工具后,可以检查 LastRunRecordEnable 中的标志,以确定哪些图形特性已启用,并相应地更新用户界面的状态(如复选框的选中状态)。
    • 例如:
      chkShowBoundingBox.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle) != 0;
      
  3. 创建和显示图形记录:

    • 在 Blob 工具运行后,可以创建一个最后运行记录并根据启用的特性进行图形显示。
    • 例如:
      ICogRecord lastRunRecord = BlobTool.CreateLastRunRecord();
      // 根据不同的记录信息更新显示
      
    • 通过检查 lastRunRecord 中的特性,可以决定如何在用户界面中呈现结果。

总结

CogBlobLastRunRecordConstants 常量提供了一种灵活的方式来控制 Blob 工具生成的图形记录的特性。通过使用这些常量,可以根据用户的需求来动态调整图形的显示方式,从而增强应用程序的交互性和可用性。

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VisionPro是一款视觉系统开发平台,提供了丰富的工具和功能,用于图像处理和分析。VisionPro二次开发是指在VisionPro的基础上进行个性化定制和扩展,以满足特定应用需求。 VisionPro二次开发可以通过编写自定义的算法和脚本来实现。用户可以使用VisionPro提供的算法库和API,根据自己的需求进行算法的扩展和修改,以达到更好的图像处理效果。 此外,VisionPro还提供了友好的界面和工具,可以通过拖拽、配置等方式,快速定制图像处理的流程。用户可以根据自己的需求,选择合适的工具和参数配置,来完成特定的图像处理任务。 VisionPro二次开发也涉及到与其他系统的集成。用户可以通过编写插件或接口,将VisionPro与其他设备或软件进行连接,实现数据的共享和交互。通过与其他系统的集成,可以扩展VisionPro的应用范围,提高系统的整体效能。 总之,VisionPro二次开发是一项在原来基础上进行个性化定制和扩展的工作,通过算法的扩展、界面的定制以及与其他系统的集成,来实现更灵活、更高效的图像处理和分析功能。 ### 回答2: VisionPro是一款先进的机器视觉软件,广泛用于工业自动化领域。visionpro二次开发是指在VisionPro软件基础上进行二次开发,根据实际需求进行定制化的开发工作。 VisionPro二次开发的目的是为了满足特定的需求或解决特定的问题。通过二次开发,可以添加新的图像处理算法、优化现有的功能、增加用户界面、集成外部设备或应用程序等。这样可以提高VisionPro的适用性和灵活性,使其更好地适应各种不同的应用场景。 在进行VisionPro二次开发时,首先需要了解和熟悉VisionPro的基本功能和特性。然后根据需要,进行软件开发、算法设计、界面设计等工作。开发完成后,还需要进行测试和调试,确保开发的功能符合要求并且可以稳定运行。 VisionPro二次开发的好处是可以根据实际需求进行定制化开发,使其更好地适应特定的应用场景。这样可以提高生产效率、降低生产成本,并且提供更好的产品质量控制。此外,VisionPro二次开发还可以提供更多的功能和选择,提高系统的灵活性和扩展性。 总之,VisionPro二次开发是一项重要的工作,可以定制化开发机器视觉应用程序,提高生产效率和质量控制的能力。这需要专业的技术团队和广泛的行业经验,以确保开发的软件能够满足实际需求并可靠运行。 ### 回答3: VisionPro是一款强大的图像处理软件,可用于实现机器视觉应用。VisionPro二次开发是指在基础软件上进行定制开发,以满足特定的应用需求。 VisionPro二次开发可以通过以下几个步骤实施: 首先,需要对应用需求进行详细的调研和分析。了解客户的具体需求,明确所需实现的功能和目标。 其次,根据需求分析的结果,制定开发方案和计划。确定所需功能的开发方式和技术手段,以及开发的时间和资源投入。 接下来,进行软件定制开发。根据方案和计划,对VisionPro软件进行二次开发。根据具体的需求,可以通过编写脚本、开发插件或接口等方式,实现所需的功能扩展或定制。 在开发过程中,需要对功能进行测试和调试,确保软件的稳定性和可靠性。可以利用模拟数据或实际图像数据进行测试,对开发的功能进行验证和优化。 最后,进行部署和应用集成。将二次开发VisionPro应用集成到实际的生产环境中,与其他设备或系统进行连接和交互。并对系统进行使用培训,使用户能够熟练操作和维护该应用。 VisionPro二次开发的好处在于可以根据需求进行定制开发,满足特定的应用场景和功能要求。通过二次开发,可以扩展和增强VisionPro的功能,提高图像处理的精确度和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值