halcon如何识别硬币?

前言

最近一直在学习halcon,在此做了一个案例,分享给大家,效果图如下:

1.思路分析

通过观察,发现1元,5角,1角,它们在面值的文字描述不一样,硬币显示的花纹不一样,如果我们通过模板匹配,那我们需要考虑2个因素,正/反面完全不一样。

换个思路,找到不变的因素【硬币外圈大小】,用最小的变量作为我们判断的基准,从而降低问题的复杂度。

2.代码逻辑分析

  1. 我们首先指定3个模板【硬币的圆圈大小】
  2. 读取原图片
  3. 使用模板匹配
  4. 标注不同的硬币

3.代码实现

3.1 创建模板

点击查看代码
创建模板
*画外圈圆
draw_circle (3600, Row1, Column1, Radius)
gen_circle (Circle, Row1, Column1, Radius)
dev_display (Image)
*画内圈圆
draw_circle (3600, Row2, Column2, Radius1)
gen_circle (Circle1, Row2, Column2, Radius1)
*取区域的差
difference (Circle, Circle1, RegionDifference)
reduce_domain (ImageEmphasize, RegionDifference, ImageReduced)
*创建模板
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
write_shape_model (ModelID, 'D:/WorkSpace/硬币/1元.shm')

3.2 模板匹配

点击查看代码
read_image (Image, 'E:/WorkSpace/HalconDemo/硬币检测/硬币/微信图片_20220620213720.jpg')

*均值滤波器
mean_image (Image, ImageMean, 3, 3)
*图片增亮
emphasize (ImageMean, ImageEmphasize, 7, 7, 10)
*读取模板
read_shape_model ('1元.shm', ModelID) read_shape_model ('1角.shm', ModelID1) read_shape_model ('5角.shm', ModelID2) arr:=[ModelID,ModelID1,ModelID2]
*设置字体的样式
set_display_font (3600, 30, 'mono', 'true', 'false')
for Index1 := 0 to 2 by 1
*模板匹配
find_shape_model (Image, arr[Index1], -0.39, 0.78, 0.4, 0, 0.5, 'least_squares', 2, 0.9, Row, Column, Angle, Score) if (|Score|>0)
tuple_length (Row, Length1)
for Index2 := 0 to Length1-1 by 1
*字符串显示的位置
set_tposition (3600, Row[Index2]-40, Column[Index2]-40)
switch (Index1)
case 0:
dev_set_color ('red')
write_string (3600, '1元')
break
case 1:
dev_set_color ('green')
write_string (3600, '1角')
break
case 2:
dev_set_color ('blue')
write_string (3600, '5角')
break
endswitch
endfor
endif
endfor

4.效果展示

效果1:



效果2:

5.总结

我在这里偷了懒,只是取了外圈大小,来确定不同硬币的识别,如果图片中存在不是硬币,但是大小一样,这样一定会误检,这也是我们的这个方案不严谨的地方,这是案例,我们以学习为主,如果你有更好的方式,请不吝赐教!

halcon如何识别硬币?的更多相关文章

  1. C#中的深度学习(四):使用Keras.NET识别硬币

    在本文中,我们将研究一个卷积神经网络来解决硬币识别问题,并且我们将在Keras.NET中实现一个卷积神经网络. 在这里,我们将介绍卷积神经网络(CNN),并提出一个CNN的架构,我们将训练它来识别硬币 ...

  2. C#中的深度学习(一):使用OpenCV识别硬币

    在本系列文章中,我们将使用深度神经网络(DNN)来执行硬币识别.具体来说,我们将训练一个DNN识别图像中的硬币. 在本文中,我们将描述一个OpenCV应用程序,它将检测图像中的硬币.硬币检测是硬币完整 ...

  3. C#中的深度学习(二):预处理识别硬币的数据集

    在文章中,我们将对输入到机器学习模型中的数据集进行预处理. 这里我们将对一个硬币数据集进行预处理,以便以后在监督学习模型中进行训练.在机器学习中预处理数据集通常涉及以下任务: 清理数据--通过对周围数 ...

  4. Halcon 条形码识别

    read_image (Image, 'C:/Users/HJ/Desktop/test_image/image.png') create_bar_code_model([], [], BarCode ...

  5. 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

    [<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...

  6. zw版·Halcon与delphi(兼谈opencv)

    zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...

  7. halcon-车牌识别

    halcon代码: 1: read_image(Image,'D:/MyFile/halcon/车牌识别/图片.jpg') 2: decompose3(Image,ImageR,ImageG,Imag ...

  8. 【halcon】学习记录

    图像采集和二值化等处理 * Image Acquisition : Code generated by Image Acquisition open_framegrabber (, , , , , , ...

  9. c#下halcon配置

    1.在halcon中写入算子,实现函数过程 比如: read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg') decompose3(Image, ImageR, ...

  10. .export*读取图片

    *读取图片 read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg define PHYS_FLASH2_1 0xBC000000 /* Image2 Bank # ...

随机推荐

  1. APICloud如何对接大牛直播SDK

    随着apicloud的普及,越来越多的用户苦于apicloud下没有一款真正靠谱低延迟的rtmp/rtsp直播播放器苦恼. 鉴于此,大牛直播SDK携手apicloud资深版主,推出apicloud对接 ...

  2. docker-compose入门--翻译

    在这一页,你将学习到如何构建一个简单的python的web应用,并通过Docker compose来运行.这个应用程序使用的是Flask框架,并维护着一个存储在reids里的点击计数器.由于这个案例使 ...

  3. 2022第五空间-web部分wp+复盘总结

    打了一天,麻了,大佬tql,这次get到了不少东西,一是一个不太常见的宽字节注入,我是真的没想到,而且后面也是看了wp理解了好一会才弄明白. 0x01: 题目是一个登录框,但是基本上是过滤掉了所有的常 ...

  4. K8S Pod Pending 故障原因及解决方案

    文章转载自:https://mp.weixin.qq.com/s/SBpnxLfMq4Ubsvg5WH89lA

  5. Solutions:如何运用Elastic App Search快速建立出色的React搜索体验

    建立搜索体验是一项艰苦的工作. 乍一看似乎很容易:建立一个搜索栏,将数据放入数据库,然后让用户输入对该数据库的查询. 但是,在数据建模,底层逻辑以及(当然)总体设计和用户体验方面,有很多事情要考虑. ...

  6. 使用kubeoperator安装k8s集群时自带的traefik-ingress-controller

    前提 承接上一篇文章:https://www.cnblogs.com/sanduzxcvbnm/p/15740596.html traefik-ingress-controller和nginx-ing ...

  7. TCP服务端收到syn但是不回复syn ack问题分析

    文章转载自:https://blog.csdn.net/jueshengtianya/article/details/52130667 最近在分析客户的一个问题时遇到了一种奇怪的情况,客户在服务端开启 ...

  8. Alertmanager配置概述

    Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分: 全局配置(global):用于定义一些全局的公共参数,如 ...

  9. JavaScript根据参数获取url中参数名的值

    //假设ulr如下var localhost="http://127.0.0.1?name=tom&sex=男&id=1";//正则方法封装function Get ...

  10. scss的使用方法

    引用scss文件--看上一篇的less使用,里面的Koala,一样的原理!!! 方法一: scss: /**定义变量 */$width:404px;$color:green;$font-size:20 ...