halcon对粘连零件处理及计数方法一
以下方法是转载
dev_cle[文]ar_wind[章]ow()
*读取图片
read_im[来]age (Image,[自] 'C:/User[网]s/Admin[淘]istrato[巴]r/Deskt[文]op/new/[章]QQ图片201[来]6121219[自]3015.jp[网]g')
get_ima[淘]ge_size[巴] (Image,[文] Width, Height)[章]
*自动阈值分割[来]
bin_thr[自]eshold (Image,[网] Region)[淘]
*分割后选择的[巴]是所需的背景,[文]所以求反一次
complem[章]ent (Region[来], RegionC[自]ompleme[网]nt)
dev_dis[淘]play(Im[巴]age)
* dev_dis[文]play(Re[章]gionCom[来]plement[自])
*做一次闭运算[网]
closing[淘]_circle[巴](Region[文]Complem[章]ent, RegionC[来]losing,[自] 3.5)
*空洞填充
f[网]ill_up_[淘]shape (Region[巴]Closing[文], RegionF[章]illUp, 'area', 1, 100)
*[来]欧式距离函数的[自]距离变换
d[网]istance[淘]_transf[巴]orm (Region[文]FillUp,[章] Distanc[来]eImage,[自] 'octagon[网]al', 'true', Width, Height)[淘]
*[巴]int4转by[文]te
c[章]onvert_[来]image_t[自]ype (Distan[网]ceImage[淘], ImageCo[巴]nverted[文], 'byte')
*[章]图像取反
i[来]nvert_i[自]mage (ImageC[网]onverte[淘]d, ImageIn[巴]vert)
*[文]增加对比度
s[章]cale_im[来]age_max[自] (ImageI[网]nvert, ImageSc[淘]aleMax)[巴]
*[文]高斯平滑处理
g[章]auss_im[来]age (ImageS[自]caleMax[网], ImageGa[淘]uss, 11)
*[巴]分水岭算法
w[文]atershe[章]ds_thre[来]shold (ImageG[自]auss, Basins,[网] 10)
*[淘]计数统计为29[巴]个
c[文]ount_ob[章]j (Basins[来], Number)[自]
*[网]发现有小区域面[淘]积干扰,重新选[巴]择区域
select_[文]shape (Basins[章], Selecte[来]dRegion[自]s, 'area', 'and', 5267.61[网], 119050)[淘]
*获取到正确的[巴]数目25
count_o[文]bj (Select[章]edRegio[来]ns, Number1[自])
—[网]—[淘]—[巴]—[文]—[章]—[来]—[自]—[网]—[淘]—[巴]—[文]—[章]—[来]—[自]—[网]—[淘]
原文链接:https://blog.csdn.net/LearningAlways/article/details/53588931
上述代码不适应新的Halcon版本,想查看新Halcon版本 对应代码和过程总结及函数说明请付积分查看
ev_clear_window()
*读取图片
read_image (Image, 'E:/程序/程序/halcon/识别粘连物体/粘连图像.JPG')
get_image_size (Image, Width, Height)
*自动阈值分割
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
*分割后选择的是所需的背景,所以求反一次
complement (Region, RegionComplement)
dev_display(Image)
*做一次闭运算
closing_circle(RegionComplement, RegionClosing, 3.5)
*空洞填充
fill_up_shape (RegionClosing, RegionFillUp, 'area', 1, 100)
*欧式距离函数的距离变换
distance_transform (RegionFillUp, DistanceImage, 'octagonal', 'true', Width, Height)
*int4转byte
convert_image_type (DistanceImage, ImageConverted, 'byte')
*图像取反
invert_image (ImageConverted, ImageInvert)
*增加对比度
scale_image_max (ImageInvert, ImageScaleMax)
*高斯平滑处理
gauss_filter (ImageScaleMax, ImageGauss, 11)
*分水岭算法
watersheds_threshold (ImageGauss, Basins, 10)
*计数统计为29个
count_obj (Basins, Number)
*发现有小区域面积干扰,重新选择区域
select_shape (Basins, SelectedRegions, 'area', 'and', 5267.61, 119050)
*获取到正确的数目26
count_obj (SelectedRegions, Number1)
函数说明
- 读取图像 read_image (输出变量:图像Object,输入变量:图像地址)
- 获取对象尺寸get_image_size (输入变量:Image, 输出变量:Width, 输出变量:Height)
- 用二进制阈值来分割图像 binary_threshold (输入变量:Image , 输出变量:处理后的区域( Region ), 输入变量:Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方图平滑) ,输入变量: LightDark提取的是黑色部分 'dark'还是白色部分'light' , 输出变量: UsedThreshold返回binary_threshold 使用的阈值)
以下内容需要兑换:
本文链接:https://www.wtao8.com/post/215.html 转载需授权!