halcon圆形、残缺圆形检测

代码中关键知识:

1、循环读取图片

2、基本图像处理:开运算、二值化、内部填充、

3、获取图像边缘线,分割曲线,然后计算曲线的circularity_xld圆率范围,和area_center_xld的面积大小,做阈值筛选

4、然后fit_circle_contour_xld 拟合,确定圆形的半径大小,然后对半径进行阈值筛选

图片数据下载:https://download.csdn.net/download/zzx2016zzx/88809987

dev_close_window()
dev_clear_window()
dev_open_window (0, 0, 646, 492, 'black', WindowHandle)
list_image_files ('/image', 'default', [], ImageFiles)
for Index := 0 to |ImageFiles|-1 by 1
    read_image (Image, ImageFiles[Index])
    get_image_size (Image, Width, Height)
    count_channels (Image, Channels)
    if(Channels==3)
        rgb1_to_gray (Image, GrayImage)
    else
        copy_image (Image, GrayImage)
    endif
    threshold (GrayImage, Regions, 119, 255)
    connection (Regions, ConnectedRegions)
    fill_up (ConnectedRegions, RegionFillUp)
    select_shape (RegionFillUp, SelectedRegions, ['area','circularity'], 'and', [4000,0.24], [23000,1])
    opening_circle (SelectedRegions, RegionOpening, 3.5)
    gen_contour_region_xld (RegionOpening, Contours, 'border')
    segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 10, 4, 10)
    count_obj (ContoursSplit, Number)
    for i:=1 to Number by 1
        select_obj (ContoursSplit, ObjectSelected, i)
        area_center_xld (ObjectSelected, Area, Row, Column, PointOrder)
        circularity_xld (ObjectSelected, Circularity)
        if(Area>3400 and Circularity>0.22)
           fit_circle_contour_xld (ObjectSelected, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius, StartPhi, EndPhi, PointOrder1)
           if(Radius>80)
               gen_circle (Circle, Row1, Column1, Radius)
               dev_display (Image)
               dev_display(Circle)       
               break
           endif
        endif
    endfor
    stop()
endfor

效果图:

halcon圆形、残缺圆形检测_第1张图片halcon圆形、残缺圆形检测_第2张图片halcon圆形、残缺圆形检测_第3张图片halcon圆形、残缺圆形检测_第4张图片halcon圆形、残缺圆形检测_第5张图片

你可能感兴趣的:(halcon,机器视觉)