利用halcon识别汽车检具孔面积和孔间距

项目要求和检具图片如下图所示:
检具操作指导书
汽车检具图像
最终识别效果如下图所示:
识别效果halcon代码如下:

read_image (Image, 'C:/Users/Administrator/Desktop/RaisingVM/halcon/20210719汽车零件圆孔识别/零件.jpg')
gen_rectangle1 (ROI_0, 483.141, 469.92, 674.5, 1011.43)
reduce_domain (Image, ROI_0, ImageReduced)
decompose3 (ImageReduced, R,G,B)
threshold (B, Region, 0,150)
connection(Region, ConnectedRegions)//将区域进行分开
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 20000)//选择孔面积大小的区域
count_obj (SelectedRegions, Number)
center_array_row := []
center_array_column := []
hole_num := 0

for i := 1 to Number by 1
    select_obj (SelectedRegions, ObjectSelected, i)
    circularity (ObjectSelected, Circularity)
    if(Circularity >0.8)
        dev_set_color ('blue')
        dev_display (ObjectSelected)
        area_center (ObjectSelected, Area, Row, Column)
        
        *用下面的轮廓方式也可以计算得到中心
        *gen_contour_region_xld (ObjectSelected, Contours, 'center')
        *fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
        dev_set_color ('white')
        disp_cross (3600, Row, Column, 30, 0)
        areamessage := (hole_num+1)+'孔面积'+ Area
        center_array_row[hole_num] := Row
        center_array_column[hole_num] := Column
        disp_message(3600, areamessage, 'image', Row-150, Column-90, 'red', 'true')//指定孔
        hole_num := hole_num + 1
    endif
endfor

*计算两两孔距
for i := 0 to hole_num-1 by 1
    if (i < hole_num-1)
        distance_pp (center_array_row[i], center_array_column[i], center_array_row[i+1], center_array_column[i+1], Distance)
        disp_line (3600, center_array_row[i], center_array_column[i], center_array_row[i+1], center_array_column[i+1])
        distmessage := '第'+(i+1)+'和第'+(i+2)+'孔距离为:'+Distance
        *disp_message(3600, distmessage, 'image', 0.5*(center_array_row[i]+center_array_row[i+1]), 0.5*(center_array_column[i]+center_array_column[i+1]), 'yellow', 'false')//指定孔
         disp_message(3600, distmessage, 'image', 30+i*50, 0, 'red', 'true')//指定孔
    else
        distance_pp (center_array_row[i], center_array_column[i], center_array_row[0], center_array_column[0], Distance)
        disp_line (3600, center_array_row[i], center_array_column[i], center_array_row[0], center_array_column[0])
        distmessage := '第'+(i+1)+'和第'+1+'孔距离为:'+Distance
        disp_message(3600, distmessage, 'image', 30+i*50, 0, 'red', 'true')//指定孔
    endif
endfor

项目合作请联系微信:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hunter206206

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值