halcon完整性检测--如何检测太阳能电池指状件的损坏

*对于太阳能行业,一个常见的问题是太阳能电池指状件的损坏。
*此示例显示了如何使用形态学提取残缺的指状件。
在这里插入图片描述

*对于太阳能行业,一个常见的问题是太阳能电池指状件的损坏。 
*此示例显示了如何使用形态学提取残缺的指状件。
* 
dev_update_off ()
dev_close_window ()
ImageName := 'solar_cell/solar_cell_'
read_image (Image, ImageName + '01')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_color ('red')
dev_set_draw ('margin')
dev_set_line_width (2)
* 
* 
* 对于太阳能电池的每个图像,提取缺陷区域
NumImages := 6
for Index := 1 to NumImages by 1
    read_image (Image, ImageName + Index$'02')
    decompose3 (Image, ImageR, ImageG, ImageB)
    * 分割黑暗区域(指状件以外的所有物体)
    threshold (ImageR, Region, 0, 159)
    connection (Region, ConnectedRegions)
    * 选择好的零件和杂乱的区域
    select_shape (ConnectedRegions, GoodSmallParts, ['area','width'], 'and', [3500,130], [5000,300])
    select_shape (ConnectedRegions, GoodLongParts, ['area','width'], 'and', [6000,350], [10000,550])
    select_shape (ConnectedRegions, Clutter, ['width','height','area'], 'or', [900,900,0], [1000,1000,100])
    * 既不是好部件也不是杂乱的区域包含断指
    *计算两个区域的差
    difference (ConnectedRegions, GoodSmallParts, Difference)
    difference (Difference, GoodLongParts, Difference)
    difference (Difference, Clutter, BrokenParts)
    *变换区域的形状
    shape_trans (BrokenParts, BrokenPartsTrans, 'rectangle1')
    * 隔离中断以进行可视化
    *腐蚀操作
    erosion_rectangle1 (BrokenParts, RegionErosion, 1, 25)
    connection (RegionErosion, ConnectedBreaks)
    shape_trans (ConnectedBreaks, Breaks, 'outer_circle')
    *膨胀操作
    dilation_circle (Breaks, Breaks, 6)
    * 删除空白区域
    * (This could also be achieved with set_system('store_empty_region','false')
    select_shape (Breaks, Breaks, 'area', 'and', 1, 99999999)
    *计算数量
    count_obj (Breaks, CountBreaks)
    * 
    *  显示检查结果
    dev_display (Image)
    dev_display (BrokenPartsTrans)
    dev_display (Breaks)
    * 
    if (CountBreaks == 0)
        disp_message (WindowHandle, 'Cell OK', 'window', 12, 12, 'black', 'true')
    else
        disp_message (WindowHandle, 'Cell not OK', 'window', 12, 12, 'red', 'true')
    endif
    * 
    if (Index != NumImages)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
    * 如果仅存在一个缺陷,请放大
    if (CountBreaks == 1)
        dev_open_window (0, 610, 300, 300, 'black', WindowHandle1)
        area_center (Breaks, Area, Row, Column)
        dev_set_part (Row[0] - 50, Column[0] - 50, Row[0] + 50, Column[0] + 50)
        dev_display (Image)
        dev_display (BrokenPartsTrans)
        dev_display (Breaks)
        stop ()
        dev_set_window (WindowHandle1)
        dev_close_window ()
    endif
endfor

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

航天子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值