halcon第三講:劃痕檢測(干貨)

隨著智能化時代的來臨,視覺就相當于人的眼睛,接下來給喜歡視覺的朋友出現(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

謝謝您的觀看?。。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容