首页 > 其他分享 >VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互

VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互

时间:2024-08-13 15:22:46浏览次数:10  
标签:控件 13 VisionPro ToolBlock Value cogToolBlockEditV21 图像 二次开发 Subject

该程序演示了如何使用CogToolBlock进行图像交互.

  1. 从vpp文件中加载一个ToolBlock。

  2. 用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。

  3. 用户还可以从coins.idb或采集FIFO中选择图像。

  4. “运行一次”按钮执行以下操作:

    1. 获取下一个图像或读取下一个图像
    2. 将图像传递给ToolBlock输入图像
    3. 运行ToolBlock一次
  5. 通过读取输出端子的值,以更新应用程序标签,显示检查结果。

  6. 用户可以更改代码以创建一个与可用摄像头特定配合的采集FIFO。

  7. 顶层脚本是一个简单的C#脚本,它运行工具。

  8. TBInspectionTest ToolBlock被用作结果分析工具,以决定检查是通过还是失败,并设置输出端子的值。

  9. 用户通过菜单按钮运行ToolBlock,但ToolBlock将针对相同的图像运行。

  10. 还利用了运行事件,以便用来自Blob工具的结果更新显示。

具体操作如下:

1. 界面设计

添加CogRecordDisplay,CogToolBlockEditV2控件,GroupBox,RadioButton,NumbericUpAndDown,Button,Label.

在这里插入图片描述

2. 添加引用

using Cognex.VisionPro;
using Cognex.VisionPro.ImageFile;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.Blob;

3. 声明变量

        private CogImageFileTool imageFileTool;
        private CogAcqFifoTool acqFifoTool;
        private long numPass=0;
        private long numFail = 0; 

4. 加载工具

  1. cogToolBlockEditV21的本地显示设置为不可见。这通常用于在不需要显示工具块的情况下运行工具,比如在后台处理图像。
cogToolBlockEditV21.LocalDisplayVisible = false;
  1. 创建一个新的图像文件工具实例,imageFileTool将用于处理图像文件。
imageFileTool = new CogImageFileTool();
  1. 打开一个图像数据库文件(coins.idb),文件路径是相对于当前应用程序的基目录。这允许工具读取图像数据。
imageFileTool.Operator.Open(AppDomain.CurrentDomain.BaseDirectory + @"\project\images\coins.idb", CogImageFileModeConstants.Read);
  1. 创建一个新的采集FIFO工具实例,acqFifoTool,用于处理图像采集。
acqFifoTool = new CogAcqFifoTool();
  1. 检查acqFifoTool的操作符是否为null。如果是,则禁用与相机相关的控件(如radCamera),表示没有有效的相机连接。
if (acqFifoTool.Operator == null)
{
    radCamera.Enabled = false;
}
  1. 如果acqFifoTool的操作符不为null,则设置曝光参数为10,配置相机的曝光时间。
else
{
    acqFifoTool.Operator.OwnedExposureParams.Exposure = 10;
}
  1. 从指定的文件(tb.vpp)加载一个ToolBlock对象,并将其设置为cogToolBlockEditV21的主题。这使得工具块可以在编辑器中进行操作。
cogToolBlockEditV21.Subject = CogSerializer.LoadObjectFromFile(AppDomain.CurrentDomain.BaseDirectory + @"\Project\tb.vpp") as CogToolBlock;
  1. cogToolBlockEditV21的主题(ToolBlock)添加一个事件处理程序,监听ToolBlock运行完成后的事件。
cogToolBlockEditV21.Subject.Ran += Subject_Ran;
  1. 设置ToolBlock的输入参数FilterLowValueFilterHighValue的值,这些值来自用户界面上的数值控件(如nAreaLownAreaHigh)。
cogToolBlockEditV21.Subject.Inputs["FilterLowValue"].Value = nAreaLow.Value;
cogToolBlockEditV21.Subject.Inputs["FilterHighValue"].Value = nAreaHigh.Value;
  1. cogToolBlockEditV21添加一个事件处理程序,监听主题变化的事件。这通常用于处理ToolBlock的更改,例如更新界面或执行其他操作。
cogToolBlockEditV21.SubjectChanged += CogToolBlockEditV21_SubjectChanged;

5. 处理CogToolBlock事件

        private void CogToolBlockEditV21_SubjectChanged(object sender, EventArgs e)
        {
            //这意味着如果用户修改了ToolBlock的内容,那么为了避免在不稳定或未配置的状态下运行处理,该按钮将被禁用。
            btnRun.Enabled = false;
        }

        private void Subject_Ran(object sender, EventArgs e)
        {
            //检查 ToolBlock 的输出 InspectionPassed 的值。这个输出是一个布尔值,表示检测是否通过。如果通过,numPass(通过的计数)增加 1;如果未通过,则 numFail(未通过的计数)增加 1。
            if ((bool)cogToolBlockEditV21.Subject.Outputs["InspectionPassed"].Value==true)
            {
                numPass++;
            }
            else
            {
                numFail++;
            }
            lblPass.Text = numPass.ToString();
            lblFail.Text = numFail.ToString();
            //将 ToolBlock 的输入 Image 的值(应为一个图像对象)赋值给 cogRecordDisplay1.Image,将其显示在记录显示控件中
            cogRecordDisplay1.Image = cogToolBlockEditV21.Subject.Inputs["Image"].Value as CogImage8Grey;
            //从 ToolBlock 的工具集中获取名为 CogBlobTool1 的工具,并将其转换为 CogBlobTool 类型
            CogBlobTool blobTool = cogToolBlockEditV21.Subject.Tools["CogBlobTool1"] as CogBlobTool;
            //调用 blobTool 的 CreateLastRunRecord 方法,生成该工具上次运行的记录,并将其赋值给 cogRecordDisplay1.Record,以便在记录显示控件中显示相关信息
            cogRecordDisplay1.Record = blobTool.CreateLastRunRecord();
            //调用 cogRecordDisplay1.Fit(true) 方法,调整显示控件的内容以适应其可见区域。这使得用户能够清晰地看到图像和记录信息
            cogRecordDisplay1.Fit(true);
        }

6. 更新CogToolBlock输入值

        private void nAreaLow_ValueChanged(object sender, EventArgs e)
        {
            cogToolBlockEditV21.Subject.Inputs["FilterLowValue"].Value = nAreaLow.Value;
        }

        private void nAreaHigh_ValueChanged(object sender, EventArgs e)
        {
            cogToolBlockEditV21.Subject.Inputs["FilterHighValue"].Value=nAreaHigh.Value;
        }

7. 界面效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到这里使用C#和CogToolBlock进行图像交互就完成了,当我们点击RunOnce按钮时,会查找面积范围在5000-8000范围内的硬币,找到的话会更新输出的Pass数量,没找到的话会更新Fail的数量,均已正确显示.另外,我们可以在下方输入的数字框通过更改面积上下限来查找指定范围内的硬币.

8. 项目示例

Visionpro二次开发:使用CogToolBlock进行图像交互

标签:控件,13,VisionPro,ToolBlock,Value,cogToolBlockEditV21,图像,二次开发,Subject
From: https://blog.csdn.net/qq_44082700/article/details/141132812

相关文章

  • ARC134E
    手玩题思路由于数据范围小,所以可以手动模拟找规律。假设\(A\)为先手,据题意,当轮到\(A\)操作时,如果此时序列里最大数为\(0\)(也就是序列里全是\(0\)),那么\(A\)就赢了。由于\(A\)操作时序列的状态是由\(B\)操作时的序列取模之后得到的,所以\(B\)操作时的序列中的元素肯定有相同的约......
  • EdrawMax v13 解锁版下载和安装教程 (综合图形图表设计软件)
    前言万兴亿图图示(WondershareEdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(EdrawMax)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学......
  • 8月13日微语报,星期二,农历七月初十
     8月13日微语报,星期二,农历七月初十,工作愉快,生活喜乐!一份微语报,众览天下事!1、埃及和南非等非洲国家将申办奥运会。2、成都发布新政:9月15日起公积金可直付购房款。3、国内半年新增超20万家AI企业,我国AI大模型产业规模全球第二。4、南水北调施工现场发生事故致5死,企业负责......
  • P3964 [TJOI2013] 松鼠聚会
    题意给定\(n\)个点,求出一个点使得每个点到这个点的切比雪夫距离之和最小。思路首先,我们可以把题目中的切比雪夫距离转化为曼哈顿距离,因为我们知道形如\((x,y)\)点之间的曼哈顿距离等于\((x+y,x-y)\)点之间的切比雪夫距离,\((x,y)\)点之间的切比雪夫距离等于\(\le......
  • 软件无线电系统 高速图像采集卡 设计原理图: 613-基于6UVPX C6678+XCVU9P的信号处理板
    基于6UVPXC6678+XCVU9P的信号处理板卡一、板卡概述      板卡基于6U VPX标准结构,包含一个C6678 DSP芯片,一个XCVU9P 高性能FPGA,双路HPC FMC。 二、处理板技术指标•  DSP处理器采用TI 8核处理器TMS320C6678;•  DSP 外挂一组64bit DDR3颗粒,总容量2GB,数据......
  • Java SE核心技术——13异常
    异常就是程序在运行过程中出现的一些错误,我们通过面向对象的思想,把这些错误也用类来描述,那么一旦产生一个错误,即就是创建了某一个错误的对象,这个对象就是我们所说的异常对象。    在这之前也见过很多的异常错误,例如:(1)IndexOutOfBoundsException:ArrayIndexOutOfBoundsExcepti......
  • [题解]P3966 [TJOI2013] 单词
    P3966[TJOI2013]单词用\(p[i]\)来表示经过节点\(i\)的字符串个数。那么节点\(u\)的答案就是fail树上,以\(u\)为根的子树的\(p\)之和。由于我们已经计算了\(p[i]\),所以字符串\(i\)作为模式串本身&模式串前缀的情况已经考虑了。还需考虑\(i\)作为模式串后缀的情况,而只有fail树上......
  • 报错:2024-08-12T18:39:35.313+08:00 ERROR 29668 --- [demo2] [ main] o.s.
    org.springframework.beans.factory.BeanDefinitionStoreException:Failedtoparseconfigurationclass[com.example.demo.DemoApplication]atorg.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)~[spring-con......
  • Mysql写入数据错误:General error: 1366 Incorrect string value: '\\xF0\\x9F\\
    这个问题,原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。我这边是在linux服务器,Mysql的版本是5.7。解决此问题需要修改Mysql的配置文件my.cnf。 总结修改配置:[client]default-character......
  • 研究C++20语法----在ubuntu中安装gcc13和g++13
    前言由于要学习一点C++20的知识点,故需要安装gcc13和g++13Ubuntu默认不能直接下载gcc13和g++13,但是只有g++13和gcc13支持C++20的语法,故想要学习C++20,就必须借助第三方工具下载。默认安装目录:/usr/bin本机安装环境:ubuntu22.4文章目录1、安装build_essential2、添加ppa......