【halcon每日一练】

芯片有无检测

test
思路:

  1. 形状模板定位,缩小图像自定义区域
  2. blob分析,循环抠图,进一步提取芯片区域,判断有无
  3. 信息汇总

halcon代码
*粗定位

read_image (Image1, 'C:/Users/njtl003/Desktop/1.png')
rgb1_to_gray (Image1, GrayImage)
zoomFactor:=0.5
zoom_image_factor (GrayImage, ImageZoomed, zoomFactor, zoomFactor, 'constant')
gen_rectangle1 (ROI_0, 106.817, 134.624, 421.924, 496.709)

reduce_domain (ImageZoomed, ROI_0, ImageReduced)
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
find_shape_model (ImageReduced, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
gen_rectangle2 (Rectangle, Row, Column, 0, 200, 200)
zoom_region (Rectangle, RegionZoom, 2, 2)
reduce_domain (GrayImage, RegionZoom, ImageReduced1)

*分割
threshold (ImageReduced1, Region, 128, 255)
fill_up (Region, RegionFillUp)
opening_rectangle1 (RegionFillUp, RegionOpening, 11, 11)
connection (RegionOpening, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
reduce_domain (GrayImage, SelectedRegions, ImageReduced2)

*精定位

*进一步分割
threshold (ImageReduced2, Region1, 128, 255)
fill_up (Region1, RegionFillUp1)
difference (RegionFillUp1, Region1, RegionDifference)
fill_up (RegionDifference, RegionFillUp2)
connection (RegionFillUp2, ConnectedRegions1)
shape_trans (ConnectedRegions1, RegionTrans, 'rectangle2')
sort_region (RegionTrans, SortedRegions, 'first_point', 'true', 'row')

*循环遍历
count_obj (SortedRegions, Number)
IcContainNumber:=0
IcEmptyNumber:=0
ICEmptyIndex:=[]
gen_empty_obj (IcContainObj)

gen_empty_region (EmptyRegion)
for Index := 1 to Number by 1
    select_obj (SortedRegions, ObjectSelected, Index)
    erosion_rectangle1 (ObjectSelected, RegionErosion, 5, 5)
    reduce_domain (GrayImage, RegionErosion, ImageReduced3)
    threshold (ImageReduced3, Region2, 100, 255)
    fill_up (Region2, RegionFillUp3)
    opening_circle (RegionFillUp3, RegionOpening1, 1.5)
    connection (RegionOpening1, ConnectedRegions2)
    select_shape (ConnectedRegions2, SelectedRegions1, 'area', 'and', 100, 500)
    shape_trans (SelectedRegions1, RegionTrans1, 'rectangle2')
    test_equal_region (SelectedRegions1, EmptyRegion, IsEqual)
    tuple_length (IsEqual, Length)
    if(Length==0)
        IcEmptyNumber:=IcEmptyNumber+1
        ICEmptyIndex:=[ICEmptyIndex,Index]
    else
        IcContainNumber:=IcContainNumber+1
        concat_obj (IcContainObj, RegionTrans1, IcContainObj)
    endif
endfor
*提取空芯片区域
select_obj (SortedRegions, EmptyICRegion, ICEmptyIndex)

*信息汇总

*信息显示
dev_clear_window ()
dev_display (Image1)
dev_get_window (WindowHandle)
dev_set_color ('green')
dev_display (IcContainObj)
disp_message (WindowHandle, '有芯片数目为:'+IcContainNumber$'2d', 'window', 20, 20, 'black', 'true')
dev_set_color ('red')
disp_message (WindowHandle, '无芯片数目为:'+IcEmptyNumber$'2d', 'window', 40, 20, 'black', 'true')
dev_display (EmptyICRegion)

效果显示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

火星wen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值