第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计
文章目录
- 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计
- 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 中的常量时执行的代码
}