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

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

示例程序源码(加注释)

*这是关于系统设置的函数,剪辑区域,设置剪辑区域设置为使能。为clip_region做的设置,后文会介绍
get_system (‘clip_region’, Information)
set_system (‘clip_region’, ‘true’)
*关闭窗口更新
dev_update_window (‘off’)
*关闭窗口
dev_close_window ()
*开启窗口,这个函数之前介绍过了
dev_open_window (0, 0, 512, 512, ‘black’, WindowID)
*读入图片,注意,这里读入了4张图片,都存在images变量当中
read_image (Images, [‘ic0’,‘ic1’,‘ic2’,‘ic3’])
将多个单通道图像转化为多通道图像,这样操作的话这就属于一个变量了,上边读入的时候,四张图像是一个数组并不是一张图像。
channels_to_image (Images, Ic)
*select_obj - 从对象数组中选择对象。现在我们就发现这个images是个图像数组。
*这个算子非常好理解,第一个参数:就是图像数组,也就是我们需要的图片在哪个数组里边;第二个参数:*我们取出的图像叫什么,我们要给他重新命名;第三个参数:你想取出这个图像数组中的哪个图片。
select_obj (Images, Input1, 1)
*显示刚刚取出的图片
dev_display (Input1)
*这个是显示F5继续的那个按钮,之前讲解的历程已经说过了。
set_display_font (WindowID, 14, ‘mono’, ‘false’, ‘false’)
disp_continue_message (WindowID, ‘black’, ‘true’)
*停止一下,让我们能直观的看到我们刚刚取出的图片。
stop ()
*和上边取出第一张图片一样,取出第二张图片并显示。
select_obj (Images, Input2, 2)
dev_display (Input2)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*和上边取出第二张图片一样,取出第三张图片并显示。
select_obj (Images, Input3, 3)
dev_display (Input3)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*和上边取出第三张图片一样,取出第四张图片并显示。
select_obj (Images, Input4, 4)
dev_display (Input4)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*多个通道的平均灰度值。这个算子是这样计算的,先把这个多通道图片的灰度值按照坐标一个一个的相加,*之后除以这个图片的通道数。IC:多通道图片;ImageMean:经过多通道均值计算的图片。
mean_n (Ic, ImageMean)
*显示多通道均值后的图片
dev_display (ImageMean)
*对图像数组Images里边的图片进行阈值分割,选取灰度值在0-40的区域。注意:images里边有4个图片,
*进行阈值分割后也会生成4个区域。
threshold (Images, Darks, 0, 40)
*将将筛选出的区域取并集命名为Dark。
union1 (Darks, Dark)
*对筛选出的区域的空洞进行填充
fill_up (Dark, DarkFilled)
*设置显示颜色为绿色
dev_set_color (‘green’)
*显示刚刚筛选出的区域,现在我们惊奇的发现,竟然把电路板上的电路线全部选取出来了。
dev_display (DarkFilled)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
对图像数组Images里边的图片进行阈值分割,选取灰度值在100-255的区域。注意:images里边有4个图
*片,进行阈值分割后也会生成4个区域。
threshold (Images, Lights, 100, 255)
*将将筛选出的区域取并集命名为Light。
union1 (Lights, Light)
*intersection 算子是取交集,前两个参数是输入区域,也就是你想把哪两个区域取交集;第三个参数是输出
*区域,两个输入区域的交集。
intersection (DarkFilled, Light, Intersection)
*显示ImageMean
dev_display (ImageMean)
*显示Intersection
dev_display (Intersection)
disp_continue_message (WindowID, ‘black’, ‘true’)
*现在是不是又惊奇的发现电路板上电路中有焊锡的部分被筛选出来了。
stop ()
*complement 求取区域的补,怎么理解这个补字呢,就是说这个图片区域内除了你选取区域以外的全部区
*域。第一个参数是要进行取补的区域;第二个参数是输入区域的补。
*特别注意:如果系统标志’clip_region’为’true’(默认值),则返回到目前为止处理的最大图像和输入区域的
差异。如果系统标志’clip_region’为’false’,则resluting区域将无限大。为避免这种情况,通过将Region的补码标志设置为TRUE来实现补码。
complement (DarkFilled, Back)
*显示Back
dev_set_color (‘red’)
dev_display (Back)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*expand_region - 填充区域之间的间隙或分割重叠区域。我们这里用到了填充
*函数原型:expand_region(Regions,ForbiddenArea:RegionExpanded:Iterations,Mode ?
*Regions:要进行填充的区域;ForbiddenArea:填充的边界;ForbiddenArea:填充或者分割之后的区域;Iterations:迭代次数;Mode :模式,填充还是分割。
expand_region (Intersection, Back, RegionExpanded, 10, ‘image’)
*对填充过后的区域进行空洞填充
fill_up (RegionExpanded, Good)
显示;我们现在惊奇的发现电路板上有焊锡的区域被提取的很完整,接下来是不是就好办了,把电路和有焊锡区域做减法不就OK了吗。
dev_display (ImageMean)
dev_set_color (‘green’)
dev_display (Good)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*difference 求取两个区域的不同。前两个参数输入区域,要进行求取差异的区域;第三个参数是差异区域。
difference (DarkFilled, Good, Rest)
*显示
dev_set_color (‘red’)
dev_display (Rest)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*expand_gray - 填充区域之间的间隙,这个算子之前也介绍过了
expand_gray (Rest, Ic, Good, Bad, 6, ‘image’, 5)
*显示
dev_display (Bad)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*对筛选出的Bad区域进行区域分割
connection (Bad, ConnectedBad)
*使用select_shape 选取面积值在150- 99999的区域,目的是为了消除杂点。
select_shape (ConnectedBad, BigBad, ‘area’, ‘and’, 150, 99999)
*area_center 对区域进行一个面积与位置统计
area_center (BigBad, AreaBad, Row, Column)
*count_obj 对漏焊数量进行计数
count_obj (BigBad, NumMissingSolder)
AreaMissingSolder := sum(AreaBad)
*显示
dev_display (Images)
dev_set_color (‘green’)
dev_set_draw (‘margin’)
dev_set_line_width (3)
dev_display (Good)
dev_set_color (‘red’)
dev_display (BigBad)
dev_set_draw (‘fill’)
dev_set_line_width (1)
dev_update_window (‘on’)
set_system (‘clip_region’, Information)

处理思路

这个电路焊锡检测是一个非常宝贵的例程,因为焊锡表面反光非常强,所以电路板从上下左右四个方向分别进行打光分析,利用了焊锡反光这一特性。把人们最讨厌的反光,通过精巧的思路转化为检测焊锡的利器。

后记

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

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

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

相关文章

【机器学习】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执行先决条件检查是依赖…

智能时代 软件赋能——2017中国软件技术大会

由中国科学院软件研究所、中科软科技股份有限公司联合主办&#xff0c;北京中科凯亚科技有限公司协办的第15届中国软件技术大会将于2017年12月在北京 国家会议中心隆重举行。 毋庸置疑&#xff0c;我们正在迈入智能时代&#xff0c;伴随着物联网、云计算、大数据、人工智能等智…

Arduino 代码机制

新建一个Arduino程序。可是建完就郁闷了&#xff0c;因为只看到了setup和loop函数&#xff0c;却没有基本的c函数。 void setup() {// put your setup code here, to run once: }void loop() {// put your main code here, to run repeatedly: }于是好奇心就来了&#xff0c;当…

Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

题目链接&#xff1a;D. Cloud of Hashtags 题意&#xff1a; 给你n个字符串&#xff0c;让你删后缀&#xff0c;使得这些字符串按字典序排列&#xff0c;要求是删除的后缀最少 题解&#xff1a; 由于n比较大&#xff0c;我们可以将全部的字符串存在一个数组里面&#xff0c;然…

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 示例程序源码&#xff08;加注释&#xff09; 读入图片与显示相关设置 dev_close_window () read_image (Image, ‘blister/blister_mixed_reference’) dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHan…

php类与对象

1.类与对象 对象&#xff1a;实际存在该类事物中每个实物的个体。$a new User(); 实例化后的$a 引用&#xff1a;php的别名&#xff0c;两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类&#xff08;逻辑单元&#xff09;里 继承&#xff1a;以原有的类…

【深度学习系列】基础知识、模型学习

基础知识 原创 【深度学习】——训练过程 原创 【深度学习】——BN层&#xff08;batch normalization&#xff09; 原创 【深度学习】——激活函数&#xff08;sigmoid、tanh、relu、softmax&#xff09; 原创 【深度学习】——损失函数 原创 【深度学习】——梯度下…