经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
halcon如何识别硬币?
来源:cnblogs  作者:喜欢吃鱼的青年  时间:2022/11/19 17:13:59  对本文有异议

halcon如何识别硬币?

前言

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

1.思路分析

通过观察,发现1元,5角,1角,它们在面值的文字描述不一样,硬币显示的花纹不一样,如果我们通过模板匹配,那我们需要考虑2个因素,正/反面完全不一样。
换个思路,找到不变的因素【硬币外圈大小】,用最小的变量作为我们判断的基准,从而降低问题的复杂度。

2.代码逻辑分析

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

3.代码实现

3.1 创建模板

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

3.2 模板匹配

点击查看代码
  1. read_image (Image, 'E:/WorkSpace/HalconDemo/硬币检测/硬币/微信图片_20220620213720.jpg')
  2. *均值滤波器
  3. mean_image (Image, ImageMean, 3, 3)
  4. *图片增亮
  5. emphasize (ImageMean, ImageEmphasize, 7, 7, 10)
  6. *读取模板
  7. read_shape_model ('1元.shm', ModelID)
  8. read_shape_model ('1角.shm', ModelID1)
  9. read_shape_model ('5角.shm', ModelID2)
  10. arr:=[ModelID,ModelID1,ModelID2]
  11. *设置字体的样式
  12. set_display_font (3600, 30, 'mono', 'true', 'false')
  13. for Index1 := 0 to 2 by 1
  14. *模板匹配
  15. find_shape_model (Image, arr[Index1], -0.39, 0.78, 0.4, 0, 0.5, 'least_squares', 2, 0.9, Row, Column, Angle, Score)
  16. if (|Score|>0)
  17. tuple_length (Row, Length1)
  18. for Index2 := 0 to Length1-1 by 1
  19. *字符串显示的位置
  20. set_tposition (3600, Row[Index2]-40, Column[Index2]-40)
  21. switch (Index1)
  22. case 0:
  23. dev_set_color ('red')
  24. write_string (3600, '1元')
  25. break
  26. case 1:
  27. dev_set_color ('green')
  28. write_string (3600, '1角')
  29. break
  30. case 2:
  31. dev_set_color ('blue')
  32. write_string (3600, '5角')
  33. break
  34. endswitch
  35. endfor
  36. endif
  37. endfor

4.效果展示

效果1:

效果2:

5.总结

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

原文链接:https://www.cnblogs.com/2828sea/p/16905956.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号