当前位置: 首页 > news >正文

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将每一种颜色分离出来&#xff0c;得到对应的单独图像&#xff0c;使用斑点工具CogBlo…...

go-zero(七) RPC服务和ETCD

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

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

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

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 坐标实现鼠标移动

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

<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools

原因 想用 apt-get download 存到本地 / NAS上&#xff0c;减少网络流浪。 看到 VMware 上的确实有 ubuntu&#xff0c;只是版本是16。 ubuntu 版本比较&#xff1a;LTS vs RR LTS: Long-Term Support 长周期支持&#xff0c; 一般每 2 年更新&#xff0c;会更可靠与更稳定…...

C#调用JAVA

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

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&#xff1f; GraphQL 是一种用于 API&#xff08;应用程序编程接口&#xff09;的查询语言&#xff0c;由 Facebook 在 2012 年开发&#xff0c;并于 2015 年开源。它提供了一种更高效、强大的方式来获取和操作数据&#xff0c;与传统的 RESTful API 相比&#…...

Java项目-基于SpringBoot+vue的租房网站设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

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

【大数据学习 | Spark】RDD的概念与Spark任务的执行流程

1. RDD的设计背景 在实际应用中&#xff0c;存在许多迭代式计算&#xff0c;这些应用场景的共同之处是&#xff0c;不同计算阶段之间会重用中间结果&#xff0c;即一个阶段的输出结果会作为下一个阶段的输入。但是&#xff0c;目前的MapReduce框架都是把中间结果写入到HDFS中&…...

ruoyi框架完成分库分表,按月自动建表功能

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

Antd中的布局组件

文章目录 一、Layout二、Menu三、Grid栅格 布局组件涉及项目框架的搭建&#xff0c;往往被忽略和低关注&#xff0c;毕竟不是经常用到&#xff0c;但是在调整项目结构的时候往往又需要重新设计布局&#xff0c;所以有必要提前归纳分析&#xff1b; 一、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)

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

提升性能测试效率与准确性:深入解析JMeter中的各类定时器

在软件性能测试领域&#xff0c;Apache JMeter是一款广泛使用的开源工具&#xff0c;它允许开发者模拟大量用户对应用程序进行并发访问&#xff0c;从而评估系统的性能和稳定性。在进行性能测试时&#xff0c;合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...

施密特正交化与单位化的情形

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

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...