日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HALCON示例程序board.hdev检测电路板焊锡有无程序剖析

發(fā)布時(shí)間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HALCON示例程序board.hdev检测电路板焊锡有无程序剖析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HALCON示例程序board.hdev檢測(cè)電路板焊錫有無(wú)程序剖析

示例程序源碼(加注釋)

*這是關(guān)于系統(tǒng)設(shè)置的函數(shù),剪輯區(qū)域,設(shè)置剪輯區(qū)域設(shè)置為使能。為clip_region做的設(shè)置,后文會(huì)介紹
get_system (‘clip_region’, Information)
set_system (‘clip_region’, ‘true’)
*關(guān)閉窗口更新
dev_update_window (‘off’)
*關(guān)閉窗口
dev_close_window ()
*開(kāi)啟窗口,這個(gè)函數(shù)之前介紹過(guò)了
dev_open_window (0, 0, 512, 512, ‘black’, WindowID)
*讀入圖片,注意,這里讀入了4張圖片,都存在images變量當(dāng)中
read_image (Images, [‘ic0’,‘ic1’,‘ic2’,‘ic3’])
將多個(gè)單通道圖像轉(zhuǎn)化為多通道圖像,這樣操作的話這就屬于一個(gè)變量了,上邊讀入的時(shí)候,四張圖像是一個(gè)數(shù)組并不是一張圖像。
channels_to_image (Images, Ic)
*select_obj - 從對(duì)象數(shù)組中選擇對(duì)象。現(xiàn)在我們就發(fā)現(xiàn)這個(gè)images是個(gè)圖像數(shù)組。
*這個(gè)算子非常好理解,第一個(gè)參數(shù):就是圖像數(shù)組,也就是我們需要的圖片在哪個(gè)數(shù)組里邊;第二個(gè)參數(shù):*我們?nèi)〕龅膱D像叫什么,我們要給他重新命名;第三個(gè)參數(shù):你想取出這個(gè)圖像數(shù)組中的哪個(gè)圖片。
select_obj (Images, Input1, 1)
*顯示剛剛?cè)〕龅膱D片
dev_display (Input1)
*這個(gè)是顯示F5繼續(xù)的那個(gè)按鈕,之前講解的歷程已經(jīng)說(shuō)過(guò)了。
set_display_font (WindowID, 14, ‘mono’, ‘false’, ‘false’)
disp_continue_message (WindowID, ‘black’, ‘true’)
*停止一下,讓我們能直觀的看到我們剛剛?cè)〕龅膱D片。
stop ()
*和上邊取出第一張圖片一樣,取出第二張圖片并顯示。
select_obj (Images, Input2, 2)
dev_display (Input2)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*和上邊取出第二張圖片一樣,取出第三張圖片并顯示。
select_obj (Images, Input3, 3)
dev_display (Input3)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*和上邊取出第三張圖片一樣,取出第四張圖片并顯示。
select_obj (Images, Input4, 4)
dev_display (Input4)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*多個(gè)通道的平均灰度值。這個(gè)算子是這樣計(jì)算的,先把這個(gè)多通道圖片的灰度值按照坐標(biāo)一個(gè)一個(gè)的相加,*之后除以這個(gè)圖片的通道數(shù)。IC:多通道圖片;ImageMean:經(jīng)過(guò)多通道均值計(jì)算的圖片。
mean_n (Ic, ImageMean)
*顯示多通道均值后的圖片
dev_display (ImageMean)
*對(duì)圖像數(shù)組Images里邊的圖片進(jìn)行閾值分割,選取灰度值在0-40的區(qū)域。注意:images里邊有4個(gè)圖片,
*進(jìn)行閾值分割后也會(huì)生成4個(gè)區(qū)域。
threshold (Images, Darks, 0, 40)
*將將篩選出的區(qū)域取并集命名為Dark。
union1 (Darks, Dark)
*對(duì)篩選出的區(qū)域的空洞進(jìn)行填充
fill_up (Dark, DarkFilled)
*設(shè)置顯示顏色為綠色
dev_set_color (‘green’)
*顯示剛剛篩選出的區(qū)域,現(xiàn)在我們驚奇的發(fā)現(xiàn),竟然把電路板上的電路線全部選取出來(lái)了。
dev_display (DarkFilled)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
對(duì)圖像數(shù)組Images里邊的圖片進(jìn)行閾值分割,選取灰度值在100-255的區(qū)域。注意:images里邊有4個(gè)圖
*片,進(jìn)行閾值分割后也會(huì)生成4個(gè)區(qū)域。
threshold (Images, Lights, 100, 255)
*將將篩選出的區(qū)域取并集命名為L(zhǎng)ight。
union1 (Lights, Light)
*intersection 算子是取交集,前兩個(gè)參數(shù)是輸入?yún)^(qū)域,也就是你想把哪兩個(gè)區(qū)域取交集;第三個(gè)參數(shù)是輸出
*區(qū)域,兩個(gè)輸入?yún)^(qū)域的交集。
intersection (DarkFilled, Light, Intersection)
*顯示ImageMean
dev_display (ImageMean)
*顯示Intersection
dev_display (Intersection)
disp_continue_message (WindowID, ‘black’, ‘true’)
*現(xiàn)在是不是又驚奇的發(fā)現(xiàn)電路板上電路中有焊錫的部分被篩選出來(lái)了。
stop ()
*complement 求取區(qū)域的補(bǔ),怎么理解這個(gè)補(bǔ)字呢,就是說(shuō)這個(gè)圖片區(qū)域內(nèi)除了你選取區(qū)域以外的全部區(qū)
*域。第一個(gè)參數(shù)是要進(jìn)行取補(bǔ)的區(qū)域;第二個(gè)參數(shù)是輸入?yún)^(qū)域的補(bǔ)。
*特別注意:如果系統(tǒng)標(biāo)志’clip_region’為’true’(默認(rèn)值),則返回到目前為止處理的最大圖像和輸入?yún)^(qū)域的
差異。如果系統(tǒng)標(biāo)志’clip_region’為’false’,則resluting區(qū)域?qū)o(wú)限大。為避免這種情況,通過(guò)將Region的補(bǔ)碼標(biāo)志設(shè)置為TRUE來(lái)實(shí)現(xiàn)補(bǔ)碼。
complement (DarkFilled, Back)
*顯示Back
dev_set_color (‘red’)
dev_display (Back)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*expand_region - 填充區(qū)域之間的間隙或分割重疊區(qū)域。我們這里用到了填充
*函數(shù)原型:expand_region(Regions,ForbiddenArea:RegionExpanded:Iterations,Mode ?
*Regions:要進(jìn)行填充的區(qū)域;ForbiddenArea:填充的邊界;ForbiddenArea:填充或者分割之后的區(qū)域;Iterations:迭代次數(shù);Mode :模式,填充還是分割。
expand_region (Intersection, Back, RegionExpanded, 10, ‘image’)
*對(duì)填充過(guò)后的區(qū)域進(jìn)行空洞填充
fill_up (RegionExpanded, Good)
顯示;我們現(xiàn)在驚奇的發(fā)現(xiàn)電路板上有焊錫的區(qū)域被提取的很完整,接下來(lái)是不是就好辦了,把電路和有焊錫區(qū)域做減法不就OK了嗎。
dev_display (ImageMean)
dev_set_color (‘green’)
dev_display (Good)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*difference 求取兩個(gè)區(qū)域的不同。前兩個(gè)參數(shù)輸入?yún)^(qū)域,要進(jìn)行求取差異的區(qū)域;第三個(gè)參數(shù)是差異區(qū)域。
difference (DarkFilled, Good, Rest)
*顯示
dev_set_color (‘red’)
dev_display (Rest)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*expand_gray - 填充區(qū)域之間的間隙,這個(gè)算子之前也介紹過(guò)了
expand_gray (Rest, Ic, Good, Bad, 6, ‘image’, 5)
*顯示
dev_display (Bad)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*對(duì)篩選出的Bad區(qū)域進(jìn)行區(qū)域分割
connection (Bad, ConnectedBad)
*使用select_shape 選取面積值在150- 99999的區(qū)域,目的是為了消除雜點(diǎn)。
select_shape (ConnectedBad, BigBad, ‘a(chǎn)rea’, ‘a(chǎn)nd’, 150, 99999)
*area_center 對(duì)區(qū)域進(jìn)行一個(gè)面積與位置統(tǒng)計(jì)
area_center (BigBad, AreaBad, Row, Column)
*count_obj 對(duì)漏焊數(shù)量進(jìn)行計(jì)數(shù)
count_obj (BigBad, NumMissingSolder)
AreaMissingSolder := sum(AreaBad)
*顯示
dev_display (Images)
dev_set_color (‘green’)
dev_set_draw (‘margin’)
dev_set_line_width (3)
dev_display (Good)
dev_set_color (‘red’)
dev_display (BigBad)
dev_set_draw (‘fill’)
dev_set_line_width (1)
dev_update_window (‘on’)
set_system (‘clip_region’, Information)

處理思路

這個(gè)電路焊錫檢測(cè)是一個(gè)非常寶貴的例程,因?yàn)楹稿a表面反光非常強(qiáng),所以電路板從上下左右四個(gè)方向分別進(jìn)行打光分析,利用了焊錫反光這一特性。把人們最討厭的反光,通過(guò)精巧的思路轉(zhuǎn)化為檢測(cè)焊錫的利器。

后記

大家有什么問(wèn)題可以向我提問(wèn)哈,我看到了第一時(shí)間回復(fù),希望在學(xué)習(xí)的路上多多結(jié)交良師益友。

總結(jié)

以上是生活随笔為你收集整理的HALCON示例程序board.hdev检测电路板焊锡有无程序剖析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。