Halcon之hello world焊球检测

   焊球项目是halcon中一个经典项目,在这里我把我学习的成果分享给大家

dev_update_window ('off')
*关闭活动窗口
dev_close_window ()
*关闭窗口
dev_open_window (0, 0, 728, 512, 'black', WindowID)
*打开一个窗口
read_image (Bond, 'die/die_03')
*读入例程中的图像为Bond-
dev_display (Bond)
*显示Bond这个图像
set_display_font (WindowID, 14, 'mono', 'true', 'false')
*设置显示字体
disp_continue_message (WindowID, 'black', 'true')
*显示继续的提示信息
stop ()
threshold (Bond, Bright, 100, 255)
*取像素值在100-255之间的像素设置为白色
shape_trans (Bright, Die, 'rectangle2')
*图像转换,将Bright转化为DIe的白色矩形
dev_set_color ('green')
*设置颜色为绿色
dev_set_line_width (3)
*设置行宽为3
dev_set_draw ('margin')
*画出边缘
dev_display (Die)
*显示Die这个矩形图像
disp_continue_message (WindowID, 'black', 'true')
*在界面上显示按F5继续的信息
stop ()
*停止
reduce_domain (Bond, Die, DieGrey)
*求出感兴趣区域,求出Bond相对于的Die的感兴趣区域
threshold (DieGrey, Wires, 0, 50)
*阈值分割,选取出像素值在0-50之间的像素
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
*填充分割出来的区域
dev_display (Bond)
*显示Bond这个图像
dev_set_draw ('fill')
*设置画图的方式为fill
dev_set_color ('red')
*设置颜色为红色
dev_display (WiresFilled)
*显示二值化分割出来的图像
disp_continue_message (WindowID, 'black', 'true')
*显示按命令继续的命令
stop ()
*停止
opening_circle (WiresFilled, Balls, 15.5)
*对于满足圆形区域的地方进行开运算,效果是去掉小尾巴
dev_set_color ('green')
*设置颜色为绿色
dev_display (Balls)
*显示Balls这个图像
disp_continue_message (WindowID, 'black', 'true')
*显示按F5继续的提示
stop ()
*停止
connection (Balls, SingleBalls)
*连接相似的区域并编号
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
*选择圆度在0.85到1.0之间的区域
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
​*对于分割的区域进行排序
dev_display (Bond)
*显示Bond这个图像
dev_set_colored (12)
*设置显示FinalBalls需要用到12种颜色
dev_display (FinalBalls)
*显示恢复出来的焊球
disp_continue_message (WindowID, 'black', 'true')
*显示提示F5以继续的消息
stop ()
*停止
smallest_circle (FinalBalls, Row, Column, Radius)
*针对分割出来的球形区域进行最小圆检测
NumBalls := |Radius|
*提取出Radius的个数,在这里也可以count_obj这个函数
Diameter := 2*Radius
*直径求取
meanDiameter := sum(Diameter)/NumBalls
*平均直径
mimDiameter := min(Diameter)
*最小直径
dev_display (Bond)
*显示Bond这个图像
disp_circle (WindowID, Row, Column, Radius)
*先图像上画圆
dev_set_color ('white')
for i := 1 to NumBalls by 1
    if (fmod(i,2)=1)
        disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]-2.7*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')
*显示直径
    else
        disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]+1.2*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')、
*显示直径
    endif
endfor
* dump_window (WindowID, 'tiff_rgb', './ball')
dev_set_color ('green')
dev_update_window ('on')
disp_continue_message (WindowID, 'black', 'true')
stop ()
dev_close_window ()










  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值