VisionPro 机器视觉案例 之 彩色保险丝个数统计
第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计
文章目录
- 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计
- 1.案例要求
- 2.实现思路
- 2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来,得到对应的单独图像,使用斑点工具CogBlobTool处理从工具输出结果集的Result.GetBlobs().Count得到数量
- 2.2 方法二 颜色匹配工具CogColorMatchTool循环改变匹配区域,得到匹配颜色结果并累加统计,得到数量
- 3.使用控件
- 3.1 方法一
- 3.1.1 颜色分割工具 —— CogColorSegmenterTool
- 3.1.2 斑点工具 —— CogBlobTool
- 3.1.3 图像文本标签工具 —— CogCreateGraphicLabelTool
- 3.2 方法二
- 3.2.1 图像格式转换工具 —— CogImageConvertTool
- 3.2.2 斑点工具 —— CogBlobTool
- 3.2.2 颜色匹配工具 —— CogColorMatchTool
- 4.代码逻辑
- 5.实现效果
- 6.知识点总结
- 6.1 Color工具
- 6.2 switch-case语句
1.案例要求
统计每一种颜色保险丝的个数
2.实现思路
2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来,得到对应的单独图像,使用斑点工具CogBlobTool处理从工具输出结果集的Result.GetBlobs().Count得到数量
- 优点:逻辑简单
- 缺点:每一种颜色都需要颜色分离工具和斑点工具,使用工具较多,颜色分离操作繁琐
2.2 方法二 颜色匹配工具CogColorMatchTool循环改变匹配区域,得到匹配颜色结果并累加统计,得到数量
- 优点:需要工具少,更简洁
- 难点:找到每一个保险丝的区域
3.使用控件
3.1 方法一
3.1.1 颜色分割工具 —— CogColorSegmenterTool
分离每一种颜色的保险丝图像
- 工具使用步骤:
- 新建 → 选择区域或点
- 框选要提取分离得颜色区域并点击接受
- 在电子模式下实时查看输出图像,重复新建操作
- 切换图片 检查其余图片得分割提取效果
- 颜色分割工具会默认打开图像重叠,会使得原始图像被绿色覆盖,会影响观察,取消选择图像结果中的显示重叠
- 新建 → 选择区域或点
- 重复操作分离其余颜色
- 其中蓝色绿色颜色值相近所以分离的图像会有多余的部分,需要在斑点工具中通过面积过滤掉
3.1.2 斑点工具 —— CogBlobTool
过滤掉多余的斑点
3.1.3 图像文本标签工具 —— CogCreateGraphicLabelTool
接收结果并展示
3.2 方法二
3.2.1 图像格式转换工具 —— CogImageConvertTool
斑点工具无法对彩色图像进行处理,需要向将彩色图像转换成灰度图像
3.2.2 斑点工具 —— CogBlobTool
提取每一个保险丝的形状,并通过过滤排除掉多余的部分,只保留每一个保险丝的斑点
这里通过分析结果的面积,设置排除掉最小面积小于2000的
3.2.2 颜色匹配工具 —— CogColorMatchTool
- 训练颜色,设置名称
- 设置区域形状为多边形CogPolygon
- 添加终端,设置图像与Region
4.代码逻辑
方法二的代码,方法一未使用代码
CogBlobTool cbt = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;CogColorMatchTool cmt = mToolBlock.Tools["CogColorMatchTool1"] as CogColorMatchTool;int num_red =0,num_green = 0,num_yellow = 0,num_blue = 0,num_orange = 0; for(int i = 0; i < cbt.Results.GetBlobs().Count;i++){cmt.Region = cbt.Results.GetBlobs()[i].GetBoundary();cmt.Run();switch(cmt.Result.ResultOfBestMatch.Color.Name){case "red":num_red++;break;case "yellow":num_yellow++;break;case "blue":num_blue++;break;case "green":num_green++;break;case"orange":num_orange++;break;default:break;}}CogGraphicLabel label = new CogGraphicLabel();label.SetXYText(50,150,"红色有"+num_red+"个,"+"黄色有"+num_yellow+"个,"+"绿色有"+num_green+"个,"+"蓝色有"+num_blue+"个,"+"橙色有"+num_orange+"个,");gc.Add(label);
5.实现效果
6.知识点总结
6.1 Color工具
名称 | 作用 |
---|---|
CogColorMatchTool(颜色匹配工具 ) | 将运行时图像的区域与参考颜色或复合颜色表进行比较,并确定最佳匹配。每次执行时,都会创建一个包含所有参考颜色的结果表,以及每种颜色生成的匹配分数。 |
CogColorSegmenterTool(颜色分割工具) | 分析彩色图像,以便生成由深色背景下的浅色像素组成的灰度图像。浅色像素对应于属于一个或多个理想颜色范围的颜色输入的特征。 |
CogColorExtractorTool(颜色提取工具) | 从RGB彩色图像中提取特定颜色,并生成灰度图像和彩色图像。灰度图像有助于观察和分析所提取颜色的分布和变化,而彩色图像则可用于验证提取结果是否正确。 |
CogCompositeColorMatchTool(复合颜色匹配工具) | 将运行时图像的区域与复合颜色表进行比较,并确定哪种复合颜色生成最佳匹配。复合颜色是由多个单独颜色组成的颜色组合。 |
6.2 switch-case语句
switch (expression) {case constant1:// 当 expression 等于 constant1 时执行的代码break; // 跳出 switch 语句case constant2:// 当 expression 等于 constant2 时执行的代码break; // 跳出 switch 语句// 可以有多个 case 语句default:// 当 expression 不等于任何 case 中的常量时执行的代码
}
相关文章:

VisionPro 机器视觉案例 之 彩色保险丝个数统计
第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计 文章目录 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计1.案例要求2.实现思路2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来,得到对应的单独图像,使用斑点工具CogBlo…...

go-zero(七) RPC服务和ETCD
go-zero 实现 RPC 服务 在实际的开发中,我们是通过RPC来传递数据的,下面我将通过一个简单的示例,说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中,我们根据user.api文件࿰…...

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
目录 前言 Generic Webhook Trigger 插件 下载插件 编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…...

043 商品详情
文章目录 详情页数据表结构voSkuItemVo.javaSkuItemSaleAttrVo.javaAttrValueAndSkuIdVo.javaSpuAttrGroupVo.javaGroupAttrParamVo.java pom.xmlSkuSaleAttrValueDao.xmlSkuSaleAttrValueDao.javaAttrGroupDao.xmlAttrGroupServiceImpl.javaSkuInfoServiceImpl.javaSkuSaleAtt…...

【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在机器学习建模过程中,模型的表现往往取决于参数的选择与优化。Scikit-learn提供了便捷的工具GridSearchCV和RandomizedSearchCV,帮助我们在参数空间中搜索最佳组合以提升模型表现。本文将从理论和实践两个角度…...

深入探讨 Puppeteer 如何使用 X 和 Y 坐标实现鼠标移动
背景介绍 现代爬虫技术中,模拟人类行为已成为绕过反爬虫系统的关键策略之一。无论是模拟用户点击、滚动,还是鼠标的轨迹移动,都可以为爬虫脚本带来更高的“伪装性”。在众多的自动化工具中,Puppeteer作为一个无头浏览器控制库&am…...

<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools
原因 想用 apt-get download 存到本地 / NAS上,减少网络流浪。 看到 VMware 上的确实有 ubuntu,只是版本是16。 ubuntu 版本比较:LTS vs RR LTS: Long-Term Support 长周期支持, 一般每 2 年更新,会更可靠与更稳定…...

C#调用JAVA
参考教程:使用IKVMC转换Jar为dll动态库(含idea打包jar方法)-CSDN博客 已经实践过,好使。...

JavaEE-多线程基础知识
文章目录 前言与回顾创建一个多线程线程的创建以及运行机制简述step1: 继承Thread类step2: 实现Runable接口step3: 基于step1使用匿名内部类step4: 基于step2使用匿名内部类step5: 基于step4使用lambda表达式(推荐) Thread的常见方法关于jconsole监视线程的工具构造方法解析获取…...

Pulid:pure and lightning id customization via contrastive alignment
1.introduction 基于微调的方案,对每个id进行定制需要花费数十分钟。另一项研究则放弃了对每个id进行微调,而是选择在一个庞大的肖像数据集上预训练一个id适配器。这些方法通常利用编码器例如clip来提取id特征,提取的特征随后以特定方式例如嵌入到cross attention集成到基础…...

什么是GraphQL,有什么特点
什么是GraphQL? GraphQL 是一种用于 API(应用程序编程接口)的查询语言,由 Facebook 在 2012 年开发,并于 2015 年开源。它提供了一种更高效、强大的方式来获取和操作数据,与传统的 RESTful API 相比&#…...

Java项目-基于SpringBoot+vue的租房网站设计与实现
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法,以及通过理论课学习与实验参考书的帮助,熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作;作为后续实验的基础,根据实验要求重…...

【大数据学习 | Spark】RDD的概念与Spark任务的执行流程
1. RDD的设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中&…...

ruoyi框架完成分库分表,按月自动建表功能
前提 这个分库分表功能,按月自动建表,做的比较久了,还没上线,是在ruoyi框架内做的,踩了不少坑,但是已经实现了,就分享一下代码吧 参考 先分享一些参考文章 【若依系列】集成ShardingSphere S…...

Antd中的布局组件
文章目录 一、Layout二、Menu三、Grid栅格 布局组件涉及项目框架的搭建,往往被忽略和低关注,毕竟不是经常用到,但是在调整项目结构的时候往往又需要重新设计布局,所以有必要提前归纳分析; 一、Layout Layout导出Sider,…...

一文详解kafka知识点
目录 1、kafka定义 2、消息队列 2.1、产品选择 2.2、应用场景 2.3、消息队列的两种模式 3、kafka架构 4、kafka生产者 4.1、kafka生产者原理 4.2、kafka生产者异步发送 4.3、同步发送 4.4、分区 4.4.1、kafka分区好处 4.4.2、分区策略 4.4.3、自定义分区 4.5、生成吞…...

C语言基础学习:抽象数据类型(ADT)
基础概念 抽象数据类型(ADT)是一种数据类型,它定义了一组数据以及可以在这组数据上执行的操作,但隐藏了数据的具体存储方式和实现细节。在C语言中,抽象数据类型(ADT)是一种非常重要的概念&…...

提升性能测试效率与准确性:深入解析JMeter中的各类定时器
在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...

施密特正交化与单位化的情形
在考研数学的线性代数部分,施密特正交化和单位化是两种不同的处理向量的方法,它们在特定的情况下被使用。以下是详细说明: 施密特正交化的应用场景 施密特正交化(Gram-Schmidt Orthogonalization)是一种从线性无关向…...

ROS机器视觉入门:从基础到人脸识别与目标检测
前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…...

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)
在当下, 日益发展的时代,宠物的数量应该均为稳步上升,在美国出现了下降的趋势, 中国 2019-2020 年也下降,这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的…...

C#里怎么样访问文件时间
C#里怎么样访问文件时间 文件时间也是一个关键信息, 因为很多数据处理需要时间来判断数据的有效性,比如股票中的股价, 它是的权重,是随着时间递减的。 一般来说,超过5年以上的数据,都是可以删除掉了。 或者说超过三年的数据,就需要压缩保存了,这样可以省掉很多磁盘空…...

Cesium教程01_认识View
Cesium 地图视图组件 目录 一、引言二、功能说明三、代码实现 1. 模板结构2. 脚本逻辑3. 样式设计 四、总结 一、引言 在三维地球可视化中,Cesium 是一个强大的开源 JavaScript 库,它能够展示精美的地球和地图应用。本示例展示了如何使用 Vue 组件化…...

【SQL Server】华中农业大学空间数据库实验报告 实验八 存储过程
1.实验目的 通过实验课程与理论课的学习深入理解掌握的存储过程的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用存储过程来进行数据库的应用程序的设计;深入学习深刻理解与存储过程相关的T-SQL语句的编…...

ArcMap 处理栅格数据的分辨率功能操作
ArcMap 处理栅格数据的分辨率功能操作 一、统一多分辨率栅格数据 1、查看两个栅格数据的分辨率 1)raster1 点击属性 2) raster2 2、统一像元大小 1)点击环境 展示和填写 处理范围 栅格分析 点击确定 3、重采样 让raster1和..2保持一致,即…...

redis7.x源码分析:(4) ae事件处理器(一)
ae模块是redis实现的Reactor模型的封装。它的主要代码实现集中在 ae.c 中,另外还提供了平台相关的io多路复用的封装,它们都实现了一套相同的poll接口,就类似于C中提供了一个接口基类,由针对不同平台的派生类去实现。 // 创建平台…...

【React】React Router:深入理解前端路由的工作原理
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 React Router:深入理解前端路由的工作原理路由的演进历程传统多页面…...

51单片机-独立按键与数码管联动
独立键盘和矩阵键盘检测原理及实现 键盘的分类:编码键盘和非编码键盘 键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如:计算机键盘。靠软件编程识别的称为非编码键盘;在单片机组成…...

visual studio 2005的MFC各种线程函数之间的调用关系
在 Visual Studio 2005 的 MFC 程序中的函数和消息机制涉及线程间通信、消息处理以及与窗口消息的交互。接下来我将详细分析以下每个函数的作用、如何使用它们以及它们之间的调用关系。 1. PostThreadMessage(m_iThOpID, MSG_OP_OVER, 0, (LPARAM)iLparm); 函数用途࿱…...