隨著智能化時代的來臨,視覺就相當于人的眼睛,接下來給喜歡視覺的朋友出現(xiàn)劃痕時我們怎么找到他!
話不多說直接上代碼
dev_close_window()
dev_update_window('off')
read_image(img,'C:/Users/user/Desktop/huaheng.png')
get_image_size (img, Width, Height)
dev_open_window_fit_image (img, 0, 0, Width, Height, WindowHandle)
set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
*定義輸出輪廓線寬為4
dev_set_line_width (4)
dev_display (img)
*windowhandle窗口使用黑色字體在一個方框內(nèi)顯示按“F5”繼續(xù)運行字體,并注冊F5消息處理
disp_continue_message (WindowHandle, 'red', 'true')
stop ()
* ****
* step: segment image 步驟:圖像分割
* ****
* -> using a local threshold 使用局部閾值
* 對Image進行7*7均值濾波 ,平滑一張圖片
mean_image (img, ImageMean, 7, 7)
*用均值濾波圖像作為二值化閾值圖像,返回小于灰度值小于該點閾值-5的圖像。
dyn_threshold (img, ImageMean, RegionDynThresh, 5, 'dark')
* -> extract connected components 提取連通分量
*由分割出來的DarkPixels獲得連通區(qū)域到ConnectedRegions
*******得到的連通區(qū)域為:
connection (RegionDynThresh, ConnectedRegions)
*設(shè)置混合輸出顏色為12種
dev_set_colored (12)
dev_display (ConnectedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* ****
* step: process regions 處理區(qū)域
* ****
* -> select large regions 選取大區(qū)域
*從ConnectedRegions中得到面積大于10小于1000的區(qū)域到SelectedRegions
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 15, 1000)
dev_display(img)
dev_display (SelectedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* -> visualize fractioned scratch 可視化劃分劃痕 X
dev_set_color ('blue')
dev_display(img)
dev_display (SelectedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
*stop ()
*合并SelectedRegions的并集到RegionUnion
union1 (SelectedRegions, RegionUnion)
dev_display (RegionUnion)
*以3.5作為圓形區(qū)域擴張的半徑,對RegionUnion擴張得到RegionDilation
dilation_circle (RegionUnion, RegionDilation, 3.5)
dev_display(img)
dev_display (RegionDilation)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*由RegionDilation獲取骨架給Skeleton
skeleton (RegionDilation, Skeleton)
dev_display (Skeleton)
*通過8鄰接或四鄰接方法將骨架鏈接后傳給ConnectedRegions1
connection (Skeleton, ConnectedRegions1)
dev_set_colored (12)
dev_display (img)
dev_display (ConnectedRegions1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* -> distinguish small and large scratches 區(qū)分大小劃痕
*選擇面積大于50小于1000的區(qū)域到Scratches
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 50, 10000)
*選擇面積大于1小于50的區(qū)域到Dots
select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 1, 50)
dev_display(img)
dev_set_color ('red')
dev_display (SelectedRegions1)
dev_set_color('blue')
dev_display (SelectedRegions2)
count_obj (SelectedRegions1, Numberballs)
disp_message (WindowHandle, '大于50小于10000的劃痕數(shù)量:'+Numberballs, 'window', 0, 0, 'red', 'true')
count_obj (SelectedRegions2, Number)
disp_message (WindowHandle, '大于1小于50的劃痕數(shù)量:'+Number, 'window', 50, 12, 'black', 'true')
運行結(jié)果:

image.png