我用根部区域作为基准去试了一下,可以做,唯一的风险就是根部铜箔相互粘连会漏掉,以下是我的代码:
- read_image (Image, './1.jpg')
- decompose3 (Image, R, G, B)
- trans_from_rgb (R, G, B, l, null, null, 'cielab')
- *//提取基准区域
- threshold (l, RegionB, 138, 255)
- opening_circle (RegionB, RegionBO, 5.5)
- connection (RegionBO, RegionBO)
- select_shape_std (RegionBO, RegionBO, 'max_area', 70)
- *//获得检测区域
- region_features (RegionBO, 'height', H)
- opening_rectangle1 (RegionBO, RegionBO, 1, H/2)
- smallest_rectangle1 (RegionBO, Row1BO, Col1BO, Row2BO, Col2BO)
- *//上移获得差集区域
- move_region (RegionBO, RegionBOM, -1, 0)
- difference (RegionBOM, RegionBO, RegionDiff)
- *//找到最大的一个
- connection (RegionDiff, RegionDiff)
- select_shape_std (RegionDiff, RegionDiff, 'max_area', 70)
- *//以smallest_rectangle1获得的左右边缘为基准去补全检测区域
- gen_region_line (RegionBaseL, Row1BO, Col1BO, Row2BO, Col1BO)
- gen_region_line (RegionBaseR, Row1BO, Col2BO, Row2BO, Col2BO)
- distance_rr_min (RegionDiff, RegionBaseL, MinDistance, Row1, Column1, Row2, Column2)
- gen_region_line (RegionLL, Row1BO, Column1, Row1BO, Column2)
- distance_rr_min (RegionDiff, RegionBaseR, MinDistance, Row1, Column1, Row2, Column2)
- gen_region_line (RegionLR, Row1BO, Column1, Row1BO, Column2)
- union2 (RegionDiff, RegionLL, RegionD)
- union2 (RegionD, RegionLR, RegionD)
- *//获得引脚区域
- threshold (R, RegionPins, 109, 255)
- intersection (RegionD, RegionPins, RegionPins)
- connection (RegionPins, RegionPins)
- area_center (RegionPins, AreaPins, RowsPins, ColsPins)
- gen_cross_contour_xld (CrossPins, RowsPins, ColsPins, 40, 0.785398)
- *//可视化
- dev_clear_window ()
- dev_display (Image)
- dev_set_color ('red')
- dev_display (CrossPins)
- disp_message (200000, 'Num: '+|RowsPins|, 'window', 10, 10, 'green', 'false')
复制代码 |