HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测

HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测

示例程序源码(加注释)

  • 获取系统关于“空白区域储存的设置”
    get_system (‘store_empty_region’, StoreEmptyRegion)
  • 系统“空白区域储存”设置为 ‘false’
    set_system (‘store_empty_region’, ‘false’)
  • 读入图片
    read_image (Image, ‘bottles/bottle_crate_01’)
  • 关闭窗口
    dev_close_window ()
  • 打开一个新图形窗口,保留给定的长宽比
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
  • 设置显示字体格式
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
  • 关闭窗口更新
    dev_update_off ()
  • 区域以边缘形式显示
    dev_set_draw (‘margin’)
  • 循环检测
    for Index := 1 to 24 by 1
    read_image (Image, ‘bottles/bottle_crate_’ + Index$’.02’)
      • 提取背景
    • 进行阈值分割,选取像素灰度值在50-130的区域
      threshold (Image, BackgroundRegion, 50, 130)
    • 使用圆形元素进行开运算
      opening_circle (BackgroundRegion, BackgroundRegion, 3.5)
      • 提取瓶子,瓶子口是很亮的。所以选取85-255区域
    • 进行阈值分割选取85-255的区域
      threshold (Image, Region, 85, 255)
    • 求取背景与提取瓶口区域的差集,将所有瓶口提取出来
      difference (Region, BackgroundRegion, Region)
    • 分割连通域
      connection (Region, ConnectedRegions)
      • 筛选大面积的反光区域,当做干扰处理
    • 使用长度宽度元素进行筛选,筛选出非瓶子的遮挡区域
      select_shape (ConnectedRegions, Clutter, [‘width’,‘height’], ‘or’, [100,100], [500,400])
    • 使用圆形元素进行开运算
      opening_circle (Clutter, Clutter, 8.5)
    • 求取差集,目的是在进行酒瓶识别时不要将不是酒瓶的区域选进去
      difference (ConnectedRegions, Clutter, Region)
    • 分割连通域
      connection (Region, ConnectedRegions)
      • 消除噪声区域
    • 使用长宽筛选认为是酒瓶子的区域
      select_shape (ConnectedRegions, Candidates, [‘width’,‘height’], ‘and’, [25,25], [100,100])
    • 对区域进行空洞填充
      fill_up (Candidates, FilledCandidates)
    • 因为酒瓶区域均为圆形,我们要保留圆形去除干扰,就用圆形元素对区域进行开运算
      opening_circle (FilledCandidates, FilledCandidates, 15.5)
    • 使用圆度对区域进行筛选
      select_shape (FilledCandidates, RoundCandidates, ‘circularity’, ‘and’, 0.87, 1)
    • 筛选出区域两点最大距离达到75以上的区域,也就是说不是瓶子的区域。
      select_shape (RoundCandidates, BigBottles, ‘max_diameter’, ‘and’, 75, 99999)
    • 显示
      dev_set_shape (‘ellipse’)
      count_obj (RoundCandidates, NumBottles)
      count_obj (Clutter, NumClutter)
      dev_display (Image)
      dev_set_line_width (5)
      dev_set_color (‘lime green’)
      dev_display (RoundCandidates)
      dev_set_color (‘goldenrod’)
      dev_display (BigBottles)
      dev_set_color (‘red’)
      dev_display (Clutter)
      dev_set_shape (‘original’)
      disp_message (WindowHandle, NumBottles + ’ bottles found.’, ‘window’, -1, -1, ‘black’, ‘true’)
      if (NumClutter > 0)
      disp_message (WindowHandle, ‘Warning! Clutter detected!’, ‘window’, 40, -1, ‘red’, ‘true’)
      endif
      if (Index < 24)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor
  • 恢复系统初始设置
    set_system (‘store_empty_region’, StoreEmptyRegion)

全是瓶身的情况
有瓶子缺少时的识别状态
瓶体倒立时的识别状态
有斜放,或者其他物品时产生报警

处理思路

经典的bolo分析进行酒瓶统计的例程,首先提取出背景干扰部分,再进行瓶身提取,提取出的瓶身区域减去提取出的背景干扰,最终将瓶身提取出来;通过开运算提取圆形的平身,消除箱体的干扰;通过区域的宽高的特征筛选出哪些是真正的瓶身,哪些是没有摆放好的瓶子。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

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

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

相关文章

#undef 标识符

#undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中&#xff0c;标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称&#xff0c;那么就会忽略该指令。一旦定义预处理器标识符&#xff0c;它将保持已定义状态且在作用域内&#xff0c;直到程序结束…

[转]OpenGL库介绍

原帖地址&#xff1a;http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx 开发基于OpenGL的应用程序&#xff0c;必须先了解OpenGL的库函数。它采用C语言风格&#xff0c;提供大量的函数来进行图形的处理和显示。OpenGL库函数的命名方式非常有规律。所有OpenGL函数…

SQL Server优化50法

查询速度慢的原因很多&#xff0c;常见如下几种&#xff1a; 1、没有索引或者没有用到索引(这是查询慢最常见的问题&#xff0c;是程序设计的缺陷) 2、I/O吞吐量小&#xff0c;形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 …

HALCON示例程序check_fish_stick_dimension.hdev生鱼棒尺寸测量;基于形态学的像素级精度尺寸测量

HALCON示例程序check_fish_stick_dimension.hdev基于形态学的像素级精度尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关闭实时显示更新 dev_update_off () 关闭窗口 dev_close_window () 读入图片 read_image (Image, ‘food/fish_sticks_raw_01’) 根据给定长宽…

单片机平台的最小偏差圆弧插补算法

在CNC机床的G代码中&#xff0c;最常见的有G0、G1、G2、G3代码&#xff0c;分别表示直线和圆弧插补&#xff0c;直线插补对于单片机来说&#xff0c;比较容易实现&#xff0c;只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了&#xff0c;但对于圆弧插补&#xff0c;…

javascript基础--数组排序

字符串的排序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>数组排序</title><script>var arr [fliar, asdf, dfe, loii, yhhl];arr.sort();alert(arr);</script> </head>&…

【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

Lua基本语法-lua与C#的交互(相当简单详细的例子)

lua脚本 与 C#的交互 本文提供全流程&#xff0c;中文翻译。Chinar坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互准备工作 2C# Create Lu…

漫谈程序员系列:千奇百怪的程序员

干开发时间长了&#xff0c;遇见好多好玩儿的程序员。 看看你躺枪了没。 博客之星评选&#xff0c;点击投我一票&#xff0c;谢谢。投过了也可以点哦&#xff0c;每天都可以投投一票。 留一手 有个哥们儿&#xff0c;在一合资公司做程序员&#xff0c;能力挺强&#xff0c;写…

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测(完整与否,是否破碎)

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测&#xff08;完整与否&#xff0c;是否破碎&#xff09; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘food/hazelnut_wafer_01’) 关闭窗口 dev_close_window () 根据给定的长宽比…

Windows Media Center .MCL文件代码执行漏洞(MS16-059)

blast 2016/06/21 13:180x00 简介漏洞作者EduardoBraun Prado在今年早期发现了WMP的.MCL文件又存在一个可以导致远程代码执行的漏洞。为什么要说又呢&#xff0c;因为这个东西实在是“不争气”&#xff0c;同一个地方出现了多次绕过导致远程代码执行的问题。0x01 历史A――MS1…

SCARA机器人与 DELTA机器人

1、SCARA机器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文译名&#xff1a;选择顺应性装配机器手臂&#xff09;是一种圆柱坐标型的特殊类型的工业机器人。1978年&#xff0c;日本山梨大学牧野洋发明SCARA&#xff0c;该机器人具有四个轴和四个…

一直以来都没直视的轮播-_-

一直以来做项目碰到轮播图我都是去网站上找现成插件拿来用&#xff0c;现成的插件1是省时间&#xff0c;拿来改改尺寸改改参数就能直接用&#xff0c;2是现在的插件确实很强大&#xff0c;对于我一个刚刚学习前端的人来说&#xff0c;牛人写的轮播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev边界轮廓的圆形拟合

HALCON示例程序circles.hdev边界轮廓的圆形拟合 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企业号办公系统-流程设计--保存与发布

如果流程未设计完时可以先保存&#xff0c;以后再打开接着设计。点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计&#xff0c;则可以打开该流程继续设计&#xff1a; 如果流程设计完成&#xff0c;可以点击安装按钮来发布流程&#xff0c;流程安装成功后即加入…

search-guard 在 Elasticsearch 2.3 上的运用

uni3orns 2016/06/23 11:09Author&#xff1a;uni3orns参考内容&#xff1a;kibana.logstash.es/content/ela…groups.google.com/forum/#!for…github.com/floragunnco…此文章基于以下软件版本&#xff0c;不同版本可能略有差异&#xff1a;elasticsearch 2.3.3search-guard…

HALCON示例程序class_2dim_sup.hdev使用二维像素分类对图像进行分割

HALCON示例程序class_2dim_sup.hdev使用二维像素分类对图像进行分割 示例程序源码&#xff08;加注释&#xff09; 定义Interactive并赋值&#xff0c;0&#xff1a;固定框&#xff1b;1&#xff1a;手工绘制框。 Interactive : 0 读入图片 read_image (Image, ‘ic’) 关闭…

sys

sys.argv 命令行参数List&#xff0c;第一个元素是程序本身路径 sys.exit(n) 退出程序&#xff0c;正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径&#xff0c;初…

修改环境变量

在path变量后添加&#xff0c;对变量长度无限制&#xff0c;需要重启后生效reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath;whatever" /freg save "HKLM\SYSTEM\CurrentCont…

Canny边缘检测算法原理及其VC实现详解(二)

3、 Canny算法的实现流程 由于本文主要目的在于学习和实现算法&#xff0c;而对于图像读取、视频获取等内容不进行阐述。因此选用OpenCV算法库作为其他功能的实现途径&#xff08;关于OpenCV的使用&#xff0c;作者将另文表述&#xff09;。首先展现本文将要处理的彩色图片。 …