halcon示例分析:通过网格分离小键盘键

By admin at 2018-02-03 • 0人收藏 • 1154人看过

blob.png

* This program determines the junctions of
* the grid separating the keys of a keypad
* 
dev_update_off ()
* 
* step: acquire image
* 
read_image (Image, 'keypad')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
* 
* step: initialize visualization
* 
dev_set_colored (3)
dev_set_draw ('fill')
* 
* step:extract the region of the grid
* 
mean_image (Image, ImageMean, 7, 7)
dyn_threshold (Image, ImageMean, RegionDynThresh, 4, 'dark')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['max_diameter','contlength'], 'and', [200,800], [99999,99999])
closing_circle (SelectedRegions, RegionClosing, 1.5)
dev_display (Image)
dev_display (RegionClosing)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* step:extract the contours of the grid
* 
skeleton (RegionClosing, Skeleton)
gen_contours_skeleton_xld (Skeleton, ContoursSkeleton, 1, 'filter')
segment_contours_xld (ContoursSkeleton, ContoursSplitSkeleton, 'lines', 5, 2, 1)
select_contours_xld (ContoursSplitSkeleton, SelectedContours, 'contour_length', 30, 1000, -0.5, 0.5)
union_collinear_contours_xld (SelectedContours, UnionCollinearContours, 100, 10, 20, rad(10), 'attr_keep')
dev_display (Image)
dev_display (UnionCollinearContours)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* step:fit lines to the contours
* 
count_obj (UnionCollinearContours, NumberContours)
gen_empty_obj (LinesHorizontal)
gen_empty_obj (LinesVertical)
for i := 1 to NumberContours by 1
    select_obj (UnionCollinearContours, ObjectSelected, i)
    fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
    gen_contour_polygon_xld (Contour, [RowBegin,RowEnd], [ColBegin,ColEnd])
    Phi := atan2(-Nr,Nc)
    if (abs(Phi) < rad(5))
        concat_obj (LinesVertical, Contour, LinesVertical)
    endif
    if (rad(85) < abs(Phi) and abs(Phi) < rad(95))
        concat_obj (LinesHorizontal, Contour, LinesHorizontal)
    endif
endfor
dev_display (Image)
dev_set_color ('red')
dev_display (LinesVertical)
dev_set_color ('yellow')
dev_display (LinesHorizontal)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* step:extract junction points of the grid
* 
RowJunction := []
ColJunction := []
RowRealJunction := []
ColRealJunction := []
count_obj (LinesHorizontal, NumberLH)
count_obj (LinesVertical, NumberLV)
for i := 1 to NumberLH by 1
    select_obj (LinesHorizontal, HorizontalLine, i)
    get_contour_xld (HorizontalLine, RowHorizontal, ColHorizontal)
    for j := 1 to NumberLV by 1
        select_obj (LinesVertical, VerticalLine, j)
        get_contour_xld (VerticalLine, RowVertical, ColVertical)
        intersection_lines (RowHorizontal[0], ColHorizontal[0], RowHorizontal[1], ColHorizontal[1], RowVertical[0], ColVertical[0], RowVertical[1], ColVertical[1], Row, Column, IsOverlapping)
        distance_ps (Row, Column, RowHorizontal[0], ColHorizontal[0], RowHorizontal[1], ColHorizontal[1], DistanceH, DistanceHMax)
        distance_ps (Row, Column, RowVertical[0], ColVertical[0], RowVertical[1], ColVertical[1], DistanceV, DistanceVMax)
        RowJunction := [RowJunction,Row]
        ColJunction := [ColJunction,Column]
        if ((DistanceH <= 30) and (DistanceV <= 30))
            RowRealJunction := [RowRealJunction,Row]
            ColRealJunction := [ColRealJunction,Column]
        endif
    endfor
endfor
dev_set_color ('white')
gen_cross_contour_xld (Cross, RowJunction, ColJunction, 12, 0.785398)
dev_display (Cross)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_display (Image)
dev_set_color ('gray')
dev_display (LinesHorizontal)
dev_display (LinesVertical)
dev_set_color ('white')
gen_cross_contour_xld (Cross, RowRealJunction, ColRealJunction, 12, 0.785398)
dev_display (Cross)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* or via region processing, starting with the
* skeleton obtained above
* 
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
junctions_skeleton (Skeleton, EndPoints, JuncPoints)
get_region_points (JuncPoints, RowJunctionRegionProcessing, ColumnJunctionRegionProcessing)
gen_cross_contour_xld (CrossCenter, RowJunctionRegionProcessing, ColumnJunctionRegionProcessing, 12, 0.785398)
dev_set_color ('gray')
dev_display (Skeleton)
dev_set_color ('white')
dev_display (CrossCenter)
disp_message (WindowHandle, 'Result of corresponding', 'window', 40, 10, 'white', 'false')
disp_message (WindowHandle, 'region processing', 'window', 90, 10, 'white', 'false')


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...