HALCON示例程序board.hdev檢測電路板焊錫有無程序剖析

HALCON示例程序board.hdev檢測電路板焊錫有無程序剖析

示例程序源碼(加注釋)

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

處理思路

這個電路焊錫檢測是一個非常寶貴的例程,因為焊錫表面反光非常強,所以電路板從上下左右四個方向分別進行打光分析,利用了焊錫反光這一特性。把人們最討厭的反光,通過精巧的思路轉化為檢測焊錫的利器。

后記

大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255303.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習】SVM理論與python實踐系列

理論部分: 《機器學習——支持向量機SVM之線性模型》 《機器學習——支持向量機SVM之非線性模型低維到高維映射》 《機器學習——支持向量機SVM之非線性模型原問題與對偶問題》 《機器學習——常用核函數》 《機器學習——支持向量機SVM之非線性模型原問題轉化為對偶問題…

eoLinker-API_Shop_驗證碼識別與生成類API調用的代碼示例合集:六位圖片驗證碼生成、四位圖片驗證碼生成、簡單驗證碼識別等...

以下示例代碼適用于 www.apishop.net 網站下的API,使用本文提及的接口調用代碼示例前,您需要先申請相應的API服務。 六位圖片驗證碼生成:包括純數字、小寫字母、大寫字母、大小寫混合、數字小寫、數字大寫、數字大小寫等情況。四位圖片驗證碼…

網上書店 買方數據庫

買方表 屬性 字段名 類型 鍵值 是否空 用戶ID UserId char(5) 主鍵 用戶名稱 UserName nvarchar(50) 用戶密碼 UserPwd nvarchar(50) 用戶真實姓名 UserRealName nvarchar(50) 用戶地址 UserAddress nvarchar(100) …

Web開發模式(MVC設計模式)

1.MVC:(Model-View-Controller)操作流程 顯示層View:主要負責接收Servlet傳遞的內容,并調用JavaBean把內容顯示給用戶。 控制層Controller:負責所有的用戶請求參數,判斷請求參數是否合法,根據請求方式調用JavaBean進行處理&#x…

Arduino IDE 配置文件

最近學習Arduino。 Arduino開源硬件和Arduino IDE是一個很容易上手的系統。 目前arduino已經支持很多種板類型,甚至已經支持了部分arm芯片。比如arduino ng、arduino uno、arduino mini、pro mini等。但是大多數情況,都是使用的atmega8/at…

HALCON示例程序bottle.hdev、bottlet.hdev瓶體字符OCR的訓練和檢測

HALCON示例程序bottle.hdev、bottlet.hdev瓶體字符OCR的訓練和檢測 示例程序源碼(加注釋) 1、先介紹bottlet.hdev(訓練OCR識別文件) *定義一個字符串變量FontName ,內容是bottle FontName : ‘bottle’ *第一步分割…

【機器學習】神經網絡BP理論與python實例系列

理論部分 《機器學習——人工神經網絡之發展歷史(神經元數學模型、感知器算法)》 《機器學習——人工神經網絡之多層神經網絡(多層與三層)》 《機器學習——人工神經網絡之后向傳播算法(BP算法)》 《機…

bzoj1597: [Usaco2008 Mar]土地購買

斜率優化dp。 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn 50000 10;struct Field {long long x,y; } t[maxn]; long long f[maxn],x[maxn],y[maxn]; int q[maxn],l,r; int n,cnt;bool cmp(F…

vue封裝axios接口

一、安裝axios axios安裝命令&#xff1a;cnpm install axios 二、在文件中引用axios 一開始我是放在src下的main.js這個文件里面&#xff0c;后來發現mounted鉤子讀取接口方法為undefined&#xff0c;百度了才發現是vue生命周期的原因&#xff0c;最好的解決辦法是把axios單獨…

編寫Arduino支持的C++類庫

以下為摘抄的例子&#xff0c;已經親自驗證過&#xff0c;例子是正確的 我們在上一講中實現了一個TN901紅外溫度傳感器51程序到Arduino程序的轉換&#xff0c;如果代碼越來越多這樣程序的可維護性會隨之降低&#xff0c;也不適合團度開發。我們應該把常用的文件封裝成C庫&#…

函數,游標與存儲過程的綜合應用

--在TOY數據庫中完成以下操作use toygo--1、編寫一個存儲過程&#xff0c;接收任意一個訂單號&#xff0c;打印訂單的表頭數據。格式如下&#xff1a;--(其中訂單編號由訂單日期訂單號的字符串組成)--訂單編號:20010520000001 訂貨日期:2001-05-20 訂貨人:拉爾森create pro…

HALCON示例程序check_blister.hdev藥品膠囊檢測

HALCON check_blister.hdev藥品膠囊檢測 示例程序源碼&#xff08;加注釋&#xff09; 顯示、讀入圖片、設置顯示字體等&#xff0c;之前的帖子已經介紹過了 dev_close_window () dev_update_off () read_image (ImageOrig, ‘blister/blister_reference’) dev_open_window_f…

【機器學習實戰】——常見函數積累

目錄 第二章 k近鄰算法 1、array.sum(axies 1) : 2、array.argsort(axies0/1) 3、array.tile(mat,(m,n)) 4、dict.get(key,value) 5、sorted函數 6、string.strip()函數 7、string.split() 8、scatter&#xff08;&#xff09;函數 9、min()&max() 10、enumera…

安裝oracle 11g 客戶端,檢查過程中報物理內存不足的解決

今早接到同事電話&#xff0c;說安裝oracle 11g客戶端的時候&#xff0c;在檢查先決條件的時候&#xff0c;報錯&#xff0c;說內存不足&#xff0c;但是本機的內存是2G&#xff0c;肯定夠用&#xff1a;如圖&#xff1a; 找了一圈&#xff0c;原來Oracle執行先決條件檢查是依賴…

智能時代 軟件賦能——2017中國軟件技術大會

由中國科學院軟件研究所、中科軟科技股份有限公司聯合主辦&#xff0c;北京中科凱亞科技有限公司協辦的第15屆中國軟件技術大會將于2017年12月在北京 國家會議中心隆重舉行。 毋庸置疑&#xff0c;我們正在邁入智能時代&#xff0c;伴隨著物聯網、云計算、大數據、人工智能等智…

Arduino 代碼機制

新建一個Arduino程序。可是建完就郁悶了&#xff0c;因為只看到了setup和loop函數&#xff0c;卻沒有基本的c函數。 void setup() {// put your setup code here, to run once: }void loop() {// put your main code here, to run repeatedly: }于是好奇心就來了&#xff0c;當…

Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

題目鏈接&#xff1a;D. Cloud of Hashtags 題意&#xff1a; 給你n個字符串&#xff0c;讓你刪后綴&#xff0c;使得這些字符串按字典序排列&#xff0c;要求是刪除的后綴最少 題解&#xff1a; 由于n比較大&#xff0c;我們可以將全部的字符串存在一個數組里面&#xff0c;然…

HALCON示例程序check_blister_mixed.hedv藥品膠囊缺陷檢測

HALCON示例程序check_blister_mixed.hedv藥品膠囊缺陷檢測 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片與顯示相關設置 dev_close_window () read_image (Image, ‘blister/blister_mixed_reference’) dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHan…

php類與對象

1.類與對象 對象&#xff1a;實際存在該類事物中每個實物的個體。$a new User(); 實例化后的$a 引用&#xff1a;php的別名&#xff0c;兩個不同的變量名字指向相同的內容 封裝: 把對象的屬性和方法組織在一個類&#xff08;邏輯單元&#xff09;里 繼承&#xff1a;以原有的類…

【深度學習系列】基礎知識、模型學習

基礎知識 原創 【深度學習】——訓練過程 原創 【深度學習】——BN層&#xff08;batch normalization&#xff09; 原創 【深度學習】——激活函數&#xff08;sigmoid、tanh、relu、softmax&#xff09; 原創 【深度學習】——損失函數 原創 【深度學習】——梯度下…