HALCON示例程序ball电路板焊点识别、检测、测量程序2剖析(与上篇文章使用了不同方法)

HALCON示例程序ball电路板焊点识别、检测、测量程序2

示例程序源码(加注释)

*这是关于显示的函数,已经介绍过了
dev_update_off ()
*定义一个字符串变量ImageNames,ImageNames[0]的含义为’die/die_02’以此类推
ImageNames := ‘die/’ + [‘die_02’,‘die_03’,‘die_04’,‘die_07’]
*设置显示颜色的色彩个数,及不同的连通域使用12种不同颜色表示
dev_set_colored (12)
*读入图片
read_image (Bond, ImageNames[0])
*得到图片尺寸
get_image_size (Bond, Width, Height)
*关闭窗口
dev_close_window ()
*打开窗口
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
*设置显示格式
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
*区域设置为边缘显示模式
dev_set_draw (‘margin’)
*设置线条显示宽度为3
dev_set_line_width (3)
*这句话是HALCON的一个求字符串个数的一个语句,即ImageNames[]数组里边有多少个原素
NumImages := |ImageNames|
*接下来使用FOR循环对每一张图片进行遍历检测
for I := 0 to NumImages - 1 by 1
*读入图片
read_image (Bond, ImageNames[I])
*显示读入图片
dev_display (Bond)
*求图片Bond的最大灰度与最小灰度
min_max_gray (Bond, Bond, 0, Min, Max, Range)
*使用刚刚求得的灰度值最大值对图片进行二值化,这样有一个好处,就是提高了程序的通用性,如果使用固定阈值进行二值化,会导致产品因光照不均或产品位置变化而产生的图片质量差异时导致检测出错。
threshold (Bond, Bright, Max - 80, 255)
*这个算子在上节也介绍过了,求解外接矩形
shape_trans (Bright, Die, ‘rectangle2’)
*显示求得矩形
dev_display (Die)
*使用求得矩形裁剪图片使图片处理区域减少,加快图像处理速度
reduce_domain (Bond, Die, DieGrey)
*再次求解最大最小灰度值,上一次是为了选择出电路板,这一次是为了选择出焊点
min_max_gray (Die, Bond, 0, Min, Max, Range)
*使用刚刚求得的灰度值最小值对图片进行二值化
threshold (DieGrey, Wires, 0, Min + 30)
*选择区域面积介于1-100的进行孔洞填充
fill_up_shape (Wires, WiresFilled, ‘area’, 1, 100)
*使用圆形元素对各个区域进行开运算
opening_circle (WiresFilled, Balls, 9.5)
*把整个定义域进行分割,分割成不同的连通域
connection (Balls, SingleBalls)
*选择最大面积的矩形
select_shape_std (SingleBalls, Rect, ‘rectangle1’, 90)
*矩形不是我们所需要的焊盘,则将选择出来的矩形区域减去
difference (SingleBalls, Rect, IntermediateBalls)
*生成一个空的区域Forbidden
gen_empty_region (Forbidden)
*这个函数是使用矩形区域对区域进行迭代扩张,接触到其他区域或者灰度值相差过大,则停止。或者用于分割区域与区域的重合区域。
*函数原型expand_gray(Regions, Image, ForbiddenArea : RegionExpand : Iterations, Mode, Threshold : )
*Regions:要进行操作的区域;Image:原始图像;RegionExpand:不进行扩张的区域;Iterations:迭代次数;Mode:模式;Threshold:阈值
expand_gray (IntermediateBalls, Bond, Forbidden, RegionExpand, 4, ‘image’, 6)
*对区域使用圆形元素进行开运算
opening_circle (RegionExpand, RoundBalls, 15.5)
*根据区域的相对位置对区域进行排序,这个在上一例子中进行了讲解
sort_region (RoundBalls, FinalBalls, ‘first_point’, ‘true’, ‘column’)
*求取最小外接圆
smallest_circle (FinalBalls, Row, Column, Radius)
*接下来就是使用半径,对焊点的直径求取了平均值
NumBalls := |Radius|
Diameter := 2 * Radius
meanDiameter := sum(Diameter) / NumBalls
mimDiameter := min(Diameter)
dev_display (RoundBalls)
*这里就是对检测的图片个数进行一个判断,如果所有图片检测完了,那么不再显示继续按钮
if (I != NumImages)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
endif
stop ()
endfor

处理思路

这个焊点检测拿到图片后我们想到的他的一个特点是圆的对吧,在一个我们看一下焊盘的灰度值很低,这个例程就是使用了这个特性完成了这个检测任务。先通过阈值对电路板进行了一个选取,减少非电路板部分对检测的干扰。然后通过最大最小灰度阈值选择出焊点,因为照片噪点或者产品本身就有噪点,对封闭区域做了一个填充。之后选择出矩形的干扰。对选择出的焊盘进行了扩张,这是为了使焊点半径求取更加准确。之后使用圆形元素进行了一个开运算,搞掉焊盘的那些毛刺。之后对区域排序求解最小外接矩形。之后做了一个简单计算,大功告成。

后记

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

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

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

相关文章

arduino 程序的机制

从一个简单的 arduino 程序说起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

电池技术多年没有较大发展,成为移动设备最大制约

各大厂商致力于发展闪充技术以此解决电池续航问题。 对于电子产品来说,不管是什么,我们最头疼的无疑就是电池问题了。而电池的重要性更是不用多说,但是,以目前的科技水平来看,就拿智能手机的CPU等功能来说&#xff0c…

什么样的数据应该放入缓存

把数据放入缓存,有三个标准: 1.数据量不大 2.访问频率高 3.数据更改频率低转载于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安装 Eclipse

由于之前已经安装了 OpenJDK 所以 这次我们可以直接下载 eclipse来安装。 Eclipse 下载:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下载后 在 下载目录,运行解压 (我下载的:eclipse-inst-lin…

C语言条件编译及编译预处理阶段

一、C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件其中 编译预处理阶段,读取c源程序,对其中…

HALCON示例程序board.hdev检测电路板焊锡有无程序剖析

HALCON示例程序board.hdev检测电路板焊锡有无程序剖析 示例程序源码(加注释) *这是关于系统设置的函数,剪辑区域,设置剪辑区域设置为使能。为clip_region做的设置,后文会介绍 get_system (‘clip_region’, Informat…

【机器学习】SVM理论与python实践系列

理论部分: 《机器学习——支持向量机SVM之线性模型》 《机器学习——支持向量机SVM之非线性模型低维到高维映射》 《机器学习——支持向量机SVM之非线性模型原问题与对偶问题》 《机器学习——常用核函数》 《机器学习——支持向量机SVM之非线性模型原问题转化为对偶问题…

eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。 六位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字小写、数字大写、数字大小写等情况。四位图片验证码…

网上书店 买方数据库

买方表 属性 字段名 类型 键值 是否空 用户ID UserId char(5) 主键 用户名称 UserName nvarchar(50) 用户密码 UserPwd nvarchar(50) 用户真实姓名 UserRealName nvarchar(50) 用户地址 UserAddress nvarchar(100) …

Web开发模式(MVC设计模式)

1.MVC:(Model-View-Controller)操作流程 显示层View:主要负责接收Servlet传递的内容,并调用JavaBean把内容显示给用户。 控制层Controller:负责所有的用户请求参数,判断请求参数是否合法,根据请求方式调用JavaBean进行处理&#x…

Arduino IDE 配置文件

最近学习Arduino。 Arduino开源硬件和Arduino IDE是一个很容易上手的系统。 目前arduino已经支持很多种板类型,甚至已经支持了部分arm芯片。比如arduino ng、arduino uno、arduino mini、pro mini等。但是大多数情况,都是使用的atmega8/at…

HALCON示例程序bottle.hdev、bottlet.hdev瓶体字符OCR的训练和检测

HALCON示例程序bottle.hdev、bottlet.hdev瓶体字符OCR的训练和检测 示例程序源码(加注释) 1、先介绍bottlet.hdev(训练OCR识别文件) *定义一个字符串变量FontName ,内容是bottle FontName : ‘bottle’ *第一步分割…

【机器学习】神经网络BP理论与python实例系列

理论部分 《机器学习——人工神经网络之发展历史(神经元数学模型、感知器算法)》 《机器学习——人工神经网络之多层神经网络(多层与三层)》 《机器学习——人工神经网络之后向传播算法(BP算法)》 《机…

bzoj1597: [Usaco2008 Mar]土地购买

斜率优化dp。 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn 50000 10;struct Field {long long x,y; } t[maxn]; long long f[maxn],x[maxn],y[maxn]; int q[maxn],l,r; int n,cnt;bool cmp(F…

vue封装axios接口

一、安装axios axios安装命令&#xff1a;cnpm install axios 二、在文件中引用axios 一开始我是放在src下的main.js这个文件里面&#xff0c;后来发现mounted钩子读取接口方法为undefined&#xff0c;百度了才发现是vue生命周期的原因&#xff0c;最好的解决办法是把axios单独…

编写Arduino支持的C++类库

以下为摘抄的例子&#xff0c;已经亲自验证过&#xff0c;例子是正确的 我们在上一讲中实现了一个TN901红外温度传感器51程序到Arduino程序的转换&#xff0c;如果代码越来越多这样程序的可维护性会随之降低&#xff0c;也不适合团度开发。我们应该把常用的文件封装成C库&#…

函数,游标与存储过程的综合应用

--在TOY数据库中完成以下操作use toygo--1、编写一个存储过程&#xff0c;接收任意一个订单号&#xff0c;打印订单的表头数据。格式如下&#xff1a;--(其中订单编号由订单日期订单号的字符串组成)--订单编号:20010520000001 订货日期:2001-05-20 订货人:拉尔森create pro…

HALCON示例程序check_blister.hdev药品胶囊检测

HALCON check_blister.hdev药品胶囊检测 示例程序源码&#xff08;加注释&#xff09; 显示、读入图片、设置显示字体等&#xff0c;之前的帖子已经介绍过了 dev_close_window () dev_update_off () read_image (ImageOrig, ‘blister/blister_reference’) dev_open_window_f…

【机器学习实战】——常见函数积累

目录 第二章 k近邻算法 1、array.sum(axies 1) : 2、array.argsort(axies0/1) 3、array.tile(mat,(m,n)) 4、dict.get(key,value) 5、sorted函数 6、string.strip()函数 7、string.split() 8、scatter&#xff08;&#xff09;函数 9、min()&max() 10、enumera…

安装oracle 11g 客户端,检查过程中报物理内存不足的解决

今早接到同事电话&#xff0c;说安装oracle 11g客户端的时候&#xff0c;在检查先决条件的时候&#xff0c;报错&#xff0c;说内存不足&#xff0c;但是本机的内存是2G&#xff0c;肯定够用&#xff1a;如图&#xff1a; 找了一圈&#xff0c;原来Oracle执行先决条件检查是依赖…