VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测
本示例演示了如何通过图像数据库使用 CogImageFileTool,并将其放入 CogToolGroup 中,对于数据库中的每个图像运行一次检测.
当用户按下 RunTest 按钮时,程序执行以下操作:
如果工具组中没有 CogImageFileTools,它将显示一条消息,告知用户该应用程序至少需要一个 CogImageFileTool,并且不再继续执行。
它遍历工具组,并将所有 CogImageFileTools 重置为其图像数据库中的第一张图像(如果它们有打开的数据库)。
它遍历工具组,并重置找到的任何 CogDataAnalysisTools 的统计信息。
它反复运行工具组,直到工具组中的第一个 CogImageFileTool 达到其数据库中的最后一张图像.
1. 界面设计
添加CogToolGroup控件和ListView,Button,一些文本和文本框.

2. 添加引用
using Cognex.VisionPro;
using Cognex.VisionPro.Exceptions;
using Cognex.VisionPro.ImageFile;
using Cognex.VisionPro.ToolGroup;
3. 声明变量
private string TItle = "Cognex VisionPro CogToolGroup Test Applicaiton";private bool mTestInProgress;private long mAccept;private long mWarn;private long mReject;private long mError;private CogToolGroup toolGroup;private CogImageFileTool imageFileTool;
4. 运行按钮事件处理
-
try-catch 块:
- 代码的主要逻辑放在
try块中,目的是捕捉在执行过程中可能出现的异常。catch块用于处理特定类型的异常(如CogException和一般的Exception),并显示相应的错误信息。
- 代码的主要逻辑放在
-
测试进行状态检查:
if (mTestInProgress) {mTestInProgress = false;return; }- 检查是否有测试正在进行。如果有,则将
mTestInProgress设置为false并返回,停止当前操作。
- 检查是否有测试正在进行。如果有,则将
-
工具组初始化:
toolGroup = cogToolGroupEditV21.Subject;- 从
cogToolGroupEditV21获取当前的工具组。
- 从
-
重置统计计数器:
mAccept = 0; mWarn = 0; mReject = 0; mError = 0; UpdateTotals(); listView1.Items.Clear(); listView1.Activation = ItemActivation.OneClick;- 初始化接受、警告、拒绝和错误的计数器,并更新总计。清空
listView1的项目,并设置激活模式为单击。
- 初始化接受、警告、拒绝和错误的计数器,并更新总计。清空
-
重置图像工具:
for (int i = toolGroup.Tools.Count - 1; i >= 0; i--) {if (toolGroup.Tools[i] is CogImageFileTool){imageFileTool = (CogImageFileTool)toolGroup.Tools[i];imageFileTool.NextImageIndex = 0; // 重置为第一张图片} }- 遍历工具组中的所有工具,查找
CogImageFileTool类型的工具,并将其NextImageIndex重置为 0(即第一张图片)。
- 遍历工具组中的所有工具,查找
-
工具有效性检查:
- 检查
imageFileTool是否为null,确保工具组至少有一个图像文件工具。 - 检查
imageFileTool.Operator.Count,确保工具有可处理的图像文件。 - 检查
imageFileTool.ImageIndexIncrement,确保图像索引增量非零。
- 检查
-
重置数据分析工具的参数:
foreach (var item in toolGroup.Tools) {if (item is CogDataAnalysisTool dataAnalysisTool){dataAnalysisTool.RunParams.ResetBufferedValues();dataAnalysisTool.RunParams.ResetRunningStatistics();} }- 遍历工具组中的所有工具,重置数据分析工具的缓冲值和运行统计信息。
-
开始测试:
button1.Text = "停止运行"; mTestInProgress = true;- 更新按钮文本为“停止运行”,并将
mTestInProgress设置为true。
- 更新按钮文本为“停止运行”,并将
-
处理图像:
long numProcessed = 0; do {this.Text = $"{TItle}({numProcessed}) of {imageFileTool.Operator.Count}";toolGroup.Run();numProcessed++;ListViewItem newItem = new ListViewItem((numProcessed - 1).ToString());// 添加处理时间和结果到 ListView...listView1.Items.Add(newItem);UpdateTotals();Application.DoEvents(); } while (mTestInProgress && imageFileTool.CurrentImageIndex < imageFileTool.Operator.Count - 1);- 使用
do-while循环处理图像,更新窗口标题以显示处理状态。每次处理后将结果添加到listView1中,并更新统计信息。
- 使用
-
结束测试:
button1.Text = "运行"; mTestInProgress = false; this.Text = TItle;- 更新按钮文本为“运行”,将
mTestInProgress设置为false,并重置窗口标题。
- 更新按钮文本为“运行”,将
-
异常处理:
catch (CogException ex) {MessageBox.Show(ex.Message); } catch (Exception gex) {MessageBox.Show(gex.Message); }- 捕捉
CogException和一般的Exception,并显示相应的错误消息。
- 捕捉
5. ListView事件处理
这段代码包含三个事件处理程序,主要用于处理 ListView 控件中的特定用户交互。下面是对每个方法的详细解释:
listView1_BeforeLabelEdit
private void listView1_BeforeLabelEdit(object sender, LabelEditEventArgs e)
{e.CancelEdit = true;
}
- 目的:此方法在用户尝试编辑
ListView控件中的标签(即项目名称)之前触发。 - 参数:
sender:触发事件的对象,通常是listView1。e:包含事件数据的LabelEditEventArgs对象。
- 逻辑:
- 通过设置
e.CancelEdit = true;,此方法阻止用户编辑ListView项目的名称。这意味着用户无法更改ListView中项目的标签。
- 通过设置
listView1_ColumnClick
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{if (listView1.Sorting == SortOrder.Ascending || listView1.Sorting == SortOrder.None){listView1.Sorting = SortOrder.Descending;}else{listView1.Sorting = SortOrder.Ascending;}
}
- 目的:此方法在用户点击
ListView的列标题时触发,目的是切换排序顺序。 - 参数:
sender:触发事件的对象,通常是listView1。e:包含事件数据的ColumnClickEventArgs对象,提供有关单击的列的信息。
- 逻辑:
- 检查当前的排序状态:
- 如果当前排序为升序(
SortOrder.Ascending)或没有排序(SortOrder.None),则将排序状态切换为降序(SortOrder.Descending)。 - 如果当前排序为降序,则将排序状态切换为升序(
SortOrder.Ascending)。
- 如果当前排序为升序(
- 这种实现允许用户通过单击列标题来快速切换排序方式。
- 检查当前的排序状态:
listView1_ItemActivate
private void listView1_ItemActivate(object sender, EventArgs e)
{if (mTestInProgress){return;}CogToolGroup toolGroup = cogToolGroupEditV21.Subject;CogImageFileTool imageFileTool = null;for (int i = 0; i < toolGroup.Tools.Count; i++){if (toolGroup.Tools[i] is CogImageFileTool){imageFileTool = (CogImageFileTool)toolGroup.Tools[i];imageFileTool.NextImageIndex = int.Parse(listView1.SelectedItems[0].SubItems[0].Text);}}toolGroup.Run();
}
- 目的:此方法在用户激活(单击)
ListView中的某个项目时触发。 - 参数:
sender:触发事件的对象,通常是listView1。e:包含事件数据的EventArgs对象。
- 逻辑:
- 首先检查是否有测试正在进行(
mTestInProgress)。如果是,则直接返回,不执行后续操作。 - 获取当前的工具组
toolGroup。 - 遍历工具组中的所有工具,寻找类型为
CogImageFileTool的工具。- 一旦找到,设置其
NextImageIndex为用户在ListView中选择的项目的索引。这个索引是通过解析所选项目的第一个子项(通常是图像索引)来获取的。
- 一旦找到,设置其
- 调用
toolGroup.Run()来运行工具组,处理新的图像。
- 首先检查是否有测试正在进行(
6. 添加工具
运行程序,在CogToolGroup控件添加CogImageFileTool,CogIDTool,CogDataAnalysisTool工具,并连线

- 图片选择C:\Program Files\Cognex\VisionPro\Images\barcode.cdb使用.
- 运行图片文件可知,至少2个条码,最多4个.因此CogDataAnalysisTool工具设置拒绝下限为0,警告下限为1.
7. 界面效果
运行项目,发现所有条码均已检测到,listView和计数器均正常显示结果.



到这里,使用C#和CogToolGroup控件进行二次开发进行图像检测就完成了.
相关文章:
VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测
本示例演示了如何通过图像数据库使用 CogImageFileTool,并将其放入 CogToolGroup 中,对于数据库中的每个图像运行一次检测. 当用户按下 RunTest 按钮时,程序执行以下操作: 如果工具组中没有 CogImageFileTools,它将显…...
mfc140u.dll丢失的科学修复手段,简单又方便的mfc140u.dll修复
遇到 "缺失 mfc140u.dll 文件" 的提示时可能会让你疑惑,但不用担心。这个文件是 Microsoft Visual C 2015 的重要组成部分,对运行特定程序非常关键。幸运的是,解决这一问题并不难。本文将简单指导你如何恢复或修复丢失的 mfc140u.d…...
RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
文章目录 一、kafka和rabbitmq全面对比分析1.1 简介1.2 kafka和rabbitmq全面对比分析1.3 影响因素 二、RabbitMQ、Kafka主要区别2.1 详解/主要区别2.1.1 设计目标和适用场景2.1.2 架构模型方面2.1.3 吞吐量和性能2.1.4 消息存储和持久化2.1.5 消息传递保证2.1.6 集群负载均衡方…...
【案例35】销售订单公式问题导致系统宕机
问题现象 经过顾问反馈,发现系统现在出现卡顿,NCC一直在转圈。 问题分析 远程排查,发现在服务器从机上defalut-7发生了内存溢出,宕机。 生成了宕机日志。分析结果如下: 销售订单相关操作,vo太多了导致…...
编程-设计模式 4:建造者模式
设计模式 4:建造者模式 定义与目的 定义:建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。目的:该模式主要用于创建复杂对象时,这些对象的创建过程可能涉及多个步骤,…...
百度文心一言API调用,千帆大模型获取API Key和API Secret图解
百度文心一言大模型调用教程,获取文心一言API Key和API Secret的方法,码笔记mabiji.com告诉大家在百度智能云的千帆大模型平台创建应用,即可获取文心一言的API Key和API Secret,详细流程如下: 1、在百度智能云的千帆大…...
kafka下载|安装
1、下载kafka https://kafka.apache.org/downloads 2、安装kafka 解压下载的kafka安装包即可 tar -xvf kafka_2.13-3.7.0.tgz -C /usr/local/3、查看kafka目录 bin目录:存放了脚本 config目录:主要存放了配置文件...
贪心算法part03
134 加油站 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行…...
以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
在科技日新月异的今天,AI技术如同一股不可阻挡的潮流,正深刻改变着我们的世界,尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者,树莓集团始终站在时代前沿,积极探索AI技术如何为数字媒体产业注入新活力。 在树…...
package.json的 和 的区别,以及|| 和 | 的区别
在 package.json 文件中的 scripts 字段里,&& 和 & 用于连接不同的命令,它们的区别在于命令执行的方式和效果: &&: 用于串联两个命令,第一个命令成功(退出码为 0)后&#x…...
Wireshark_DNS_v7.0
Wireshark_DNS_v7.0 一、 nslookup 前置 nslookup 是一个网络命令行工具,用于查询域名系统(DNS)中的域名解析记录。通过使用 nslookup,你可以获取某个域名的IP地址,或者获取与某个IP地址关联的域名信息。 查看域名…...
阿里云的CentOS系统上安装Docker
在阿里云的CentOS系统上安装Docker的详细步骤如下: 一、前置条件 确保系统内核版本:Docker要求CentOS系统的内核版本高于3.10。你可以通过执行uname -r命令来查看当前系统的内核版本。卸载旧版本的Docker(如果已安装)࿱…...
力扣面试经典100题
进阶,其他解法 数组 88. 合并两个有序数组 - 力扣(LeetCode) 1、按非递减顺序合并两个数组 从末尾开始,用while分没到两个数组头,到第一个数组头,到第二个数组头三种情况 class Solution { public:voi…...
python打怪练习
1. 求一个数的幂值 def mi(a, b):c afor i in range(b-1):a a * creturn aprint(mi(2, 4))2. 输出斐波那契数列 def feibonaqi(n):l []a 1b 1for i in range(n):l.append(a)l.append(b)a b ab a bprint(l)feibonaqi(5)3. 输出特定字典数据 keys [name, old, score…...
excel下载模板,0KB或者乱码问题
Sptingboot项目 — maven打包,云效,docker,k8s 场景 — 导出excel模板 问题 1.乱码 2.下载为0KB,打开没有数据 模板内容 测试代码 测试方法 方法过程结果问题原因将文件直接放到服务器使用接口下载数据正常,排除文件问题排…...
JDBC连接Mysql数据库超详细讲解
JDBC连接Mysql数据库 如何导入驱动jar包 进入mysql官网 – https://www.mysql.com/ 点击下载找到方框内选项 点击 在项目文件夹创建lib文件 , 将下载好的驱动器导入 , 再添加到项目即可 步骤一:注册JDBC驱动 在Java中,要与数据库进行交互&…...
ArcGIS基础:自定义创建点线面等样式符号以方便使用
有时,使用ArcGIS自带的符号样式库无法满足我们使用要求,还需要进行调整,可能会浪费一些时间,那么自己新建一些样式符号备用, 需要的时候直接使用,会节省很多时间,大家学会之后,对学…...
蔚来2025届全球校招笔试/测评通关攻略北森测评题库更新了!
蔚来2025届全球校园招聘笔试/测评攻略 尊敬的各位考生,蔚来汽车2025届全球校园招聘笔试/测评环节即将开启。为了帮助您更好地准备并顺利通过这一环节,我们特此提供以下详细攻略。 一、考前准备 确认考试时间:请务必在截止日期前完成考试&am…...
如何在linux系统上部署Redis
<1>简介 Redis 全称 Remote Dictionary Server(远程字典服务器),是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务…...
操作系统开发行业的市场需求分析
操作系统作为计算机软件生态的核心,其开发不仅关乎技术的深度与广度,更与市场需求紧密相连。随着技术的不断进步和各行各业对数字化转型的迫切需求,操作系统开发行业面临着日益复杂且多样化的市场需求。以下从基础功能需求、技术创新需求、行…...
解决FanControl中ADLXWrapper初始化失败的系统方法
解决FanControl中ADLXWrapper初始化失败的系统方法 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanControl.Re…...
WRF和WPS模型在Ubuntu系统上的安装与常见问题解决指南
1. WRF和WPS模型简介 WRF(Weather Research and Forecasting)模型是一个广泛应用于气象研究和业务预报的中尺度数值天气预报系统。它由美国国家大气研究中心(NCAR)等多个机构联合开发,能够模拟从全球尺度到云尺度的各种…...
MobaXterm中文版:5步教你掌握Windows最强远程管理神器
MobaXterm中文版:5步教你掌握Windows最强远程管理神器 【免费下载链接】Mobaxterm-Chinese Mobaxterm simplified Chinese version. Mobaxterm 的简体中文版. 项目地址: https://gitcode.com/gh_mirrors/mo/Mobaxterm-Chinese 还在为远程服务器管理烦恼吗&am…...
ChatTTS语言学习助手:生成地道口语对话练习材料
ChatTTS语言学习助手:生成地道口语对话练习材料 1. 引言:你的专属AI口语陪练 学外语最难的是什么?很多人会说是“开口说”。没有语言环境,找不到练习伙伴,对着课本念出来的句子总是干巴巴的,和真实对话里…...
逆向阿里系227滑块,除了n值,这几个固定参数(a/t/p/x5secdata)你确定拿对了吗?
逆向阿里系227滑块:那些被低估的固定参数陷阱 在逆向工程的世界里,我们常常被那些复杂的算法和动态生成的值所吸引,却忽略了那些看似简单却同样关键的固定参数。就像建造一座高楼,大家总是关注最显眼的钢结构,却很少有…...
OpenClaw对比测试:千问3.5-9B与其他模型在自动化任务中的表现
OpenClaw对比测试:千问3.5-9B与其他模型在自动化任务中的表现 1. 测试背景与动机 作为一个长期使用OpenClaw进行个人工作流自动化的技术爱好者,我最近遇到了一个现实问题:当需要处理复杂任务链时,不同的大模型在OpenClaw框架下的…...
从单人到派对:Nucleus Co-op如何让你的电脑变身多人游戏主机
从单人到派对:Nucleus Co-op如何让你的电脑变身多人游戏主机 【免费下载链接】splitscreenme-nucleus Nucleus Co-op is an application that starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirro…...
造相-Z-Image-Turbo亚洲美女LoRA入门指南:开箱即用的图片生成服务
造相-Z-Image-Turbo亚洲美女LoRA入门指南:开箱即用的图片生成服务 1. 服务概览与核心价值 造相-Z-Image-Turbo亚洲美女LoRA是一个基于Z-Image-Turbo模型的图片生成Web服务,特别集成了laonansheng/Asian-beauty-Z-Image-Turbo-Tongyi-MAI-v1.0 LoRA模型…...
trackerjacker硬件推荐:选择最佳无线网卡提升监控效果
trackerjacker硬件推荐:选择最佳无线网卡提升监控效果 【免费下载链接】trackerjacker Like nmap for mapping wifi networks youre not connected to, plus device tracking 项目地址: https://gitcode.com/gh_mirrors/tr/trackerjacker trackerjacker是一款…...
告别VOC数据集:手把手教你用BDD100K训练PyTorch版MobileNetV3-SSD(含数据转换脚本)
从BDD100K到实战:轻量级目标检测模型MobileNetV3-SSD的完整训练指南 在计算机视觉领域,目标检测一直是工业界和学术界关注的焦点。随着边缘计算和移动设备的普及,如何在资源受限的环境中部署高效的目标检测模型成为开发者面临的新挑战。本文将…...
