halcon第二講:焊點(diǎn)提取

本文要完成的任務(wù)是將下圖中焊點(diǎn)提取出來,對應(yīng)于halcon例程Blob分析中的ball.hdev。

image.png
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'die_03.png')
disp_continue_message (WindowHandle, 'black', 'true')
stop()
 
*形狀轉(zhuǎn)換,最小外接矩形并填充
threshold (Image, Regions, 91, 242)
shape_trans (Regions, RegionTrans, 'rectangle2')
 
*摳圖
reduce_domain (Image, RegionTrans, ImageReduced)
threshold (ImageReduced, Regions1, 0, 50)
 
*區(qū)域填充,fill_up是將所有的區(qū)域填充,fill_up_shape是將面積在1到100的填充
fill_up_shape (Regions1, RegionFillUp, 'area', 1, 100)
disp_continue_message (WindowHandle, 'black', 'true')
stop()
 
*用一個(gè)圓形的結(jié)構(gòu)元素做開運(yùn)算
opening_circle (RegionFillUp, RegionOpening, 13.5)
 
*打斷區(qū)域做特征選擇(這里用圓度特征)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'roundness', 'and', 0.88349, 1)
 
*排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
 
*計(jì)算連通域的個(gè)數(shù)
count_obj (SortedRegions, Number)
disp_continue_message (WindowHandle, 'black', 'true')
stop()
 
*計(jì)算最小外接圓并畫出
dev_display (Image)
smallest_circle (SortedRegions, Row, Column, Radius)
disp_circle (WindowHandle, Row, Column, Radius)
Diameter:= 2*Radius
 
*顯示直徑
for i:=0 to |Radius|-1 by 1
   if(fmod(i,2)==1)
       disp_message (WindowHandle, 'D: ' + Diameter[i], 'image', Row[i]-Diameter[i] , max([Column[i] - 60,0]), 'white', 'false')
   else
       disp_message (WindowHandle, 'D: ' + Diameter[i], 'image', Row[i]+Diameter[i], max([Column[i] - 60,0]), 'white', 'false')
   endif   
endfor

運(yùn)行結(jié)果如下:

image.png

請關(guān)注我,讓我們一起開創(chuàng)視覺的領(lǐng)域?。。?!

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

相關(guān)閱讀更多精彩內(nèi)容

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