HALCON示例程序ball電路板焊點識別、檢測、測量程序2剖析(與上篇文章使用了不同方法)

HALCON示例程序ball電路板焊點識別、檢測、測量程序2

示例程序源碼(加注釋)

*這是關于顯示的函數,已經介紹過了
dev_update_off ()
*定義一個字符串變量ImageNames,ImageNames[0]的含義為’die/die_02’以此類推
ImageNames := ‘die/’ + [‘die_02’,‘die_03’,‘die_04’,‘die_07’]
*設置顯示顏色的色彩個數,及不同的連通域使用12種不同顏色表示
dev_set_colored (12)
*讀入圖片
read_image (Bond, ImageNames[0])
*得到圖片尺寸
get_image_size (Bond, Width, Height)
*關閉窗口
dev_close_window ()
*打開窗口
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
*設置顯示格式
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
*區域設置為邊緣顯示模式
dev_set_draw (‘margin’)
*設置線條顯示寬度為3
dev_set_line_width (3)
*這句話是HALCON的一個求字符串個數的一個語句,即ImageNames[]數組里邊有多少個原素
NumImages := |ImageNames|
*接下來使用FOR循環對每一張圖片進行遍歷檢測
for I := 0 to NumImages - 1 by 1
*讀入圖片
read_image (Bond, ImageNames[I])
*顯示讀入圖片
dev_display (Bond)
*求圖片Bond的最大灰度與最小灰度
min_max_gray (Bond, Bond, 0, Min, Max, Range)
*使用剛剛求得的灰度值最大值對圖片進行二值化,這樣有一個好處,就是提高了程序的通用性,如果使用固定閾值進行二值化,會導致產品因光照不均或產品位置變化而產生的圖片質量差異時導致檢測出錯。
threshold (Bond, Bright, Max - 80, 255)
*這個算子在上節也介紹過了,求解外接矩形
shape_trans (Bright, Die, ‘rectangle2’)
*顯示求得矩形
dev_display (Die)
*使用求得矩形裁剪圖片使圖片處理區域減少,加快圖像處理速度
reduce_domain (Bond, Die, DieGrey)
*再次求解最大最小灰度值,上一次是為了選擇出電路板,這一次是為了選擇出焊點
min_max_gray (Die, Bond, 0, Min, Max, Range)
*使用剛剛求得的灰度值最小值對圖片進行二值化
threshold (DieGrey, Wires, 0, Min + 30)
*選擇區域面積介于1-100的進行孔洞填充
fill_up_shape (Wires, WiresFilled, ‘area’, 1, 100)
*使用圓形元素對各個區域進行開運算
opening_circle (WiresFilled, Balls, 9.5)
*把整個定義域進行分割,分割成不同的連通域
connection (Balls, SingleBalls)
*選擇最大面積的矩形
select_shape_std (SingleBalls, Rect, ‘rectangle1’, 90)
*矩形不是我們所需要的焊盤,則將選擇出來的矩形區域減去
difference (SingleBalls, Rect, IntermediateBalls)
*生成一個空的區域Forbidden
gen_empty_region (Forbidden)
*這個函數是使用矩形區域對區域進行迭代擴張,接觸到其他區域或者灰度值相差過大,則停止。或者用于分割區域與區域的重合區域。
*函數原型expand_gray(Regions, Image, ForbiddenArea : RegionExpand : Iterations, Mode, Threshold : )
*Regions:要進行操作的區域;Image:原始圖像;RegionExpand:不進行擴張的區域;Iterations:迭代次數;Mode:模式;Threshold:閾值
expand_gray (IntermediateBalls, Bond, Forbidden, RegionExpand, 4, ‘image’, 6)
*對區域使用圓形元素進行開運算
opening_circle (RegionExpand, RoundBalls, 15.5)
*根據區域的相對位置對區域進行排序,這個在上一例子中進行了講解
sort_region (RoundBalls, FinalBalls, ‘first_point’, ‘true’, ‘column’)
*求取最小外接圓
smallest_circle (FinalBalls, Row, Column, Radius)
*接下來就是使用半徑,對焊點的直徑求取了平均值
NumBalls := |Radius|
Diameter := 2 * Radius
meanDiameter := sum(Diameter) / NumBalls
mimDiameter := min(Diameter)
dev_display (RoundBalls)
*這里就是對檢測的圖片個數進行一個判斷,如果所有圖片檢測完了,那么不再顯示繼續按鈕
if (I != NumImages)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
endif
stop ()
endfor

處理思路

這個焊點檢測拿到圖片后我們想到的他的一個特點是圓的對吧,在一個我們看一下焊盤的灰度值很低,這個例程就是使用了這個特性完成了這個檢測任務。先通過閾值對電路板進行了一個選取,減少非電路板部分對檢測的干擾。然后通過最大最小灰度閾值選擇出焊點,因為照片噪點或者產品本身就有噪點,對封閉區域做了一個填充。之后選擇出矩形的干擾。對選擇出的焊盤進行了擴張,這是為了使焊點半徑求取更加準確。之后使用圓形元素進行了一個開運算,搞掉焊盤的那些毛刺。之后對區域排序求解最小外接矩形。之后做了一個簡單計算,大功告成。

后記

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

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

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

相關文章

arduino 程序的機制

從一個簡單的 arduino 程序說起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

電池技術多年沒有較大發展,成為移動設備最大制約

各大廠商致力于發展閃充技術以此解決電池續航問題。 對于電子產品來說,不管是什么,我們最頭疼的無疑就是電池問題了。而電池的重要性更是不用多說,但是,以目前的科技水平來看,就拿智能手機的CPU等功能來說&#xff0c…

什么樣的數據應該放入緩存

把數據放入緩存,有三個標準: 1.數據量不大 2.訪問頻率高 3.數據更改頻率低轉載于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安裝 Eclipse

由于之前已經安裝了 OpenJDK 所以 這次我們可以直接下載 eclipse來安裝。 Eclipse 下載:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下載后 在 下載目錄,運行解壓 (我下載的:eclipse-inst-lin…

C語言條件編譯及編譯預處理階段

一、C語言由源代碼生成的各階段如下: C源程序->編譯預處理->編譯->優化程序->匯編程序->鏈接程序->可執行文件其中 編譯預處理階段,讀取c源程序,對其中…

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

HALCON示例程序board.hdev檢測電路板焊錫有無程序剖析 示例程序源碼(加注釋) *這是關于系統設置的函數,剪輯區域,設置剪輯區域設置為使能。為clip_region做的設置,后文會介紹 get_system (‘clip_region’, Informat…

【機器學習】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執行先決條件檢查是依賴…