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,一经查实,立即删除!

相关文章

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

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

【转】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;写…

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;流程安装成功后即加入…

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

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

IDEA注册jar包使用和常用插件

IDEA注册jar包使用 点击获取下载地址或生成注册码 一、安装完成后&#xff0c;先不启动&#xff0c;首先如下图修改相关的地方。 二、启动IDEA&#xff0c;并且激活IDEA IDEA插件仓库 IntelliJ IDEA Plugins 一、Maven Helper 我一般用这款插件来查看maven的依赖树。在不使用此…

Android Monkey压力测试

一. JAVA环境的搭建 安装jdk-8u151-windows-x64,可以到官网或者应用中心下载.JAVA环境变量的搭建: 在"我的电脑"-"属性"-"高级"-"环境变量"中,点击新建,填写变量名为JAVA_HOME,变量值为JAVA安装的路径.在系统变量中找到Path,点击编辑,…

bzoj 4517: [Sdoi2016]排列计数

4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 637 Solved: 396[Submit][Status][Discuss]Description 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a;1 ~ n 这 n 个数在序列中各出现了一次若第 i 个数 A[i] 的值为 i&#x…

自制反汇编逆向分析工具 迭代第六版本 (五)

本工具从最初版的跳转分布图只为了更直观地分析反汇编代码的分支结构&#xff0c;第三版开始对直观图进行逆向分支代码的输出&#xff0c;第四版对分支输出策略的一些探索&#xff0c;第五版结合之前的探索进行改进。第六版在现在功能的基础上进行增强&#xff0c;利用第六版&a…

centos7搭建FTP服务器

1.   使用 yum 安装 vsftpd&#xff1a;yum install -y vsftpd 2.  启动 VSFTPD&#xff1a;systemctl start vsftpd.service 3.  启动后可监听到21端口&#xff1a;netstat -nltp | grep 21 4.  配置FTP权限&#xff1a;&#xff08;vsftpd.conf&#xff0c;修改前先备…

教你如何剖析源码

一、源码阅读需求 在学习中&#xff0c;我们会需要了解&#xff0c;学习&#xff0c;使用一个框架&#xff0c;一个新的函数库。在工作中&#xff0c;因为业务需求&#xff0c;因为性能问题&#xff0c;可能通过一个更高性能的工具&#xff0c;架构去优化我们的程序。 那么&…

php调用API支付接口(转自刘68)

首先访问 https://charging.teegon.com/ 注册账号&#xff0c; 找到开发配置 记下client_id和client_secret。 点击 天工开放平台 点击天工收银 点击 SDK下载与使用 选择php版下载 解压后获得 打开form.php这个是样板文件可以用它来测试是否成功&#xff0c;测试前需要先修…

单目相机标定原理

一&#xff0e;相机标定主要涉及三个坐标系&#xff1a;图像坐标系、摄像机坐标系和世界坐标系 【图像坐标系】 摄像机采集的图像变换为数字图像后&#xff0c;每副数字图像在计算机内为M x N数组&#xff0c;M行N列的图像中每一个元素&#xff08;pixel&#xff09;数值就是图…

Android开始之 activity_lifecycle和现场保护

生命周期&#xff1a; oncreate—onstart—onresume&#xff0c;--onpause--onstop&#xff0c;——onrestart——onstart——onresume&#xff0c;。。onpause。。。onstop。。。ondestroy 现在保护---保存系统状态 通过这个方法保存到数据库中或者xml中&#xff0c;&#xff…

Apache启动错误:could not bind to address[::]:443

Q&#xff1a;Windows环境下启动apache报错如下&#xff1a; 可是在httpd.conf文件中apache listen的明明是http 80端口&#xff0c;为什么会报443的错误&#xff1f; A&#xff1a;因为你的计算机安装了VM&#xff0c;所有有个vm的进程一直占用着443端口&#xff0c;在命令行下…

针孔相机拍摄的图像坐标和空间点的对应关系

一&#xff1a;摄像机成像原理 摄像机成像模型一般有三种&#xff1a;透镜投影模型&#xff08;小孔摄像机模型&#xff09;、正交投影模型和透视投影模型 光学中最基本的高斯成像公式&#xff1a;1/u 1/v 1/f (式一) 原理图如下&#xff1a; 二&#xff1a;认识三个…