halcon blob分析demo

blob分析实现电路板焊点直径测量

分析图像为:

 代码如下:

* 创建一个显示窗口
dev_update_window ('off')
dev_close_window ()
dev_open_window (0, 0, 728, 512, 'black', WindowID)
* 读取一张图片,得到Image
read_image (Image, 'C:/Users/lhy/Desktop/机器视觉/halcon_demo/ball.bmp')
* 转灰度图,得到GrayImage
rgb1_to_gray (Image, GrayImage)
* 二值化,得到BinRegion1区域
threshold (GrayImage, BinRegion1, 100, 255)
* 获取BinRegion1区域的最小外接矩形区域BinRegion2
shape_trans (BinRegion1, BinRegion2, 'rectangle2')
* 从灰度图片中抠取BinRegion1区域,得到电路板图像PcbImage
reduce_domain (GrayImage, BinRegion2, PcbImage)
* 对电路板图像PcbImage进行二值化,得到Regin3区域
threshold (PcbImage, Regin3, 0, 50)
* 对Region3区域进行填充,得到RegionFillUp
fill_up (Regin3, RegionFillUp)
* 对RegionFillUp进行形态学开操作,滤掉噪声,得到区域Balls
opening_circle (RegionFillUp, Balls, 15.5)
* 对区域Balls连通域断开,得到SingleBalls的连通域数组
connection (Balls, SingleBalls)
* 对SingleBalls进行特征选择,选择圆形特征
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
* 根据各个区域的列坐标的最小值,按照从小到大的递增方式,对Regions进行排序
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
* 对区域FinalBalls求最小外接圆、半径、圆心,得到Row, Column, Radius是数组
smallest_circle (FinalBalls, Row, Column, Radius)
* 外接圆的数量
NumBalls := |Radius|
* 外接圆半径x2得到直径
Diameter := 2 * Radius
* 求外接圆的平均直接
meanDiameter := mean(Diameter)
*外接圆的最小直径
minDiameter := min(Diameter)
*焊点的测量结果绘制到图像上
dev_display (GrayImage)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
disp_message (WindowID, 'D: ' + Diameter$'.4', 'image', Row - 2 * Radius, Column, 'white', 'false')
dev_update_window ('on')

测量结果:

猜你喜欢

转载自blog.csdn.net/weicao1990/article/details/128129805