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 中的常量时执行的代码
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时数据研发 | Flink技术栈

下周要开始接触一些实时的内容了&#xff0c;想来是很幸运的&#xff0c;这是我在新人培训上提问过技术前辈的问题&#xff1a;“想学习实时相关技术&#xff0c;但是部门没有类似的需求&#xff0c;应该如何提升&#xff1f;”当时师姐说先用心去学&#xff0c;然后向主管证明…

Spring cloud 一.Consul服务注册与发现(4)

1.动态刷新案例步骤 1.问题 接着上一步,我们在consul的dev配置分支修改了内容马上访问,结果无效 会发现还是原来的内容&#xff0c;/(ㄒoㄒ)/~~ &#xff0c;没有做到及时响应和动态刷新 2.步骤 RefreshScope主启动类添加 package com.atguigu.cloud;import org.springfram…

石油化工调度台的外观如何设计更有科技感

在石油化工行业中&#xff0c;调度台作为生产运营的核心指挥中枢&#xff0c;其设计不仅关乎操作效率&#xff0c;更是企业形象和技术实力的体现。那么&#xff0c;到底如何在调度台的外观设计中融入科技感&#xff0c;以提升工作效率并彰显企业前沿形象&#xff0c;成为了一个…

【机器学习】——朴素贝叶斯模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

如何使用Jest测试你的React组件

在本文中&#xff0c;我们将了解如何使用Jest&#xff08;Facebook 维护的一个测试框架&#xff09;来测试我们的React组件。我们将首先了解如何在纯 JavaScript 函数上使用 Jest&#xff0c;然后再了解它提供的一些开箱即用的功能&#xff0c;这些功能专门用于使测试 React 应…

Stm32f103X HAL库 串口DMA空闲中断学习 踩坑记

捡 了一个Stm32f103X的工控板, 开发工具是 STM32cubeide ,复制了之前闲的时候建的一个485通讯的空工程&#xff0c;只配置了圈中的引脚,用的是usart3 ,增加了需要用的io,编程器是网上几块钱买的jlink-ob,带模拟串口的. 在学习串口通信的过程中总感觉不太顺利 ,刚开始用串口中断…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…

PDF内容提取,MinerU使用

准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…

掌握 Spring 事务管理:深入理解 @Transactional 注解

在业务方法上使用Transactional开启声明式事务时&#xff0c;很有可能由于使用方式有误&#xff0c;导致事务没有生效。 环境准备 表结构 CREATE TABLE admin (id bigint(20) unsigned NOT NULL AUTO_INCREMENT,username varchar(255) DEFAULT NULL,password varchar(255) …

设计模式之 观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听一个主题对象&#xff08;Subject&#xff09;。当主题对象的状态发生变化时&#xff0c;所有依赖于它的观察者都会得到…

【python】将word文档内容转换为excel表格

在日常工作中&#xff0c;我们经常需要将Word文档中的内容提取并转换为Excel表格&#xff0c;以便进行数据分析和处理。本文将介绍如何使用Python编写一个简单的程序&#xff0c;将Word文档中的内容转换为Excel表格。 一.实例 使用以下word文档作为例子&#xff1a; 工具界面如…

Linux|进程程序替换

目录 什么是进程替换 替换原理 exec函数 exec* 函数的共性 什么是进程替换 进程程序替换是指将一个进程中正在运行的程序替换为另一个全新的程序的过程&#xff0c;但替换不是创建新进程&#xff0c;只是将对应程序的代码和数据进行替换。具体来说&#xff0c;这个替换过程涉…

大数运算(加减乘除和输入、输出模块)

为什么会有大数呢&#xff1f;因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807&#xff0c;最多也就19位&#xff0c;那么超过19位的如何计算呢&#xff1f;这就引申出来大数了。 本博客适合思考过这道题&#xff0c;但是没做出来或…

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

对于新手学习SpringBoot开发&#xff0c;可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握&#xff0c;如果快速上手数据库开发&#xff0c;可以先按照本文介绍的方式使用JdbcTemplat…

flex布局 昵图网【案例】

效果展示 只是个大概&#xff0c;可自己完善。 昵图网 代码展示 <body><!-- https://static.ntimg.cn/original/images/soso.png --><div class"container"><div class"header"><!-- <div class"logo"><i…

[第五空间 2021]pklovecloud 详细题解

知识点: 构造POP链 PHP类的作用域 NULL强比较 目录穿越 源码如下: <?php include flag.php; class pkshow { function echo_name() { return "Pk very safe^.^"; } } class acp { protected $cinder; public $neutron;public $n…

dockerfile构建Nginx镜像练习二(5-2)

环境准备&#xff1a; (1)保证拥有centos基础镜像 docker images | grep centos (2)服务器保证可以连接外网 1.创建工作目录 mkdir nginx cd nginx 2.在工作目录中创建并编写Dockerfile文件 vim dockerfile #定义基础镜像 FROM centos:7#维护者信息(可缺省) MAINTAINER d…

Android Surfaceflinger显示图层合成方式

Android SurfaceFlinger是Android系统中负责窗口管理和图像合成的核心组件。它接收来自不同应用的图层数据&#xff0c;并将这些图层合并成一个单一的图像&#xff0c;然后输出到显示设备上。SurfaceFlinger的合成方式主要涉及两种&#xff1a;Client合成和Device合成。 adb s…

wsl安装

一. wsl简介 1. wsl和wsl2的区别 wsl需要把linux命令翻译为windows命令&#xff0c;性能差一些。 wsl2直接使用linux内核&#xff0c;不需要翻译&#xff0c;性能好&#xff0c;但开销相对大一点&#xff0c;因为需要多运行一个hyper-v虚拟机 (并非完整的虚拟机&#xff0c;是…

任务通知的本质(任务通知车辆运行) 软件定时器的本质(增加游戏音效)

任务通知的本质 没有任务通知 所谓"任务通知"&#xff0c;你可以反过来读"通知任务"。 我们使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可 以明确指定&#xff1a;通知哪个任务。 使用队列、信号量、…