思路:需要用到模板图像,提取到模板图像的Region后提取样品的Region,通过difference算子得到两个Region之间的差异区域。
模板图像:
ps:原图有点大,这里上传的是截图,可能因为截图的尺寸影响效果。
两张样品图:
halcon代码:
*获取模板图像的Region
read_image (Image, 'D:/Halcon-WorkSpaces/Halcon-Demo/毛刺检测/1.jpg')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 100)
*遍历检测
for i := 2 to 3 by 1
read_image (Image1, 'D:/Halcon-WorkSpaces/Halcon-Demo/毛刺检测/'+i+'.jpg')
rgb1_to_gray (Image1, GrayImage1)
threshold (GrayImage1, Regions1, 0, 100)
*计算两个区域对称差异
symm_difference (Regions, Regions1, RegionDifference)
connection (RegionDifference, ConnectedRegions)
*定义瑕疵范围
select_shape (ConnectedRegions, SelectedRegions, ['area','width','height'], 'and', [50,10,10], [99999,99999,99999])
area_center (SelectedRegions, Area, Row, Column)
*显示瑕疵区域
dev_clear_window ()
dev_set_draw ('margin')
dev_display (Image1)
for Index := 0 to |Row|-1 by 1
disp_circle (3600, Row[Index], Column[Index], 64)
endfor
stop ()
endfor
效果展示: