Halcon缺陷檢測例項轉OpenCV實現(二) PCB印刷缺陷檢測
後面連續幾周將開啟缺陷檢測專題模式,這是第二篇,上篇連結如下,敬請關注!
Halcon缺陷檢測例項轉OpenCV實現(一)---網格缺陷檢測
本期來用OpenCV實現Halcon中一個簡單的PCB印刷缺陷檢測例項。
Halcon中對應的例子為pcb_inspection.hdev,源圖和結果圖如下:
Halcon程式碼比較簡單,這裡也貼出來,短短13行:
read_image (Image, 'pcb')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
* detect defects ...
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)
實現步驟:對原圖做開運算、閉運算然後將二者結果做差,閾值提取。OpenCV的實現我們也參考上面的步驟,詳細展示說明如下:
源圖:
(1)對源圖做開運算:
(2)對源圖做閉運算:
(3)開運算和閉運算做差:
(4)對差值圖閾值處理:
(5)對閾值圖找輪廓並標記結果:
完整程式碼與注意事項:
import numpy as np
import cv2
font = cv2.FONT_HERSHEY_SIMPLEX
img = cv2.imread('./pcb.png')
cv2.imshow('src',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
k1 = np.zeros((7, 7),np.uint8)
pts = np.array([[2,0],[4,0],[6,2],[6,4],[4,6],[2,6],[0,4],[0,2]],np.int32)
pts = pts.reshape((-1,1,2))
cv2.fillPoly(k1,[pts],(1,1,1),cv2.LINE_AA)
k1[5,1] = 1
k1[6,2:5] = 1
print(k1)
opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, k1)
cv2.imshow('opening',opening)
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, k1)
cv2.imshow('closing',closing)
diff = cv2.absdiff(opening, closing)
cv2.imshow('diff',diff)
ret,thresh = cv2.threshold(diff, 80, 255, cv2.THRESH_BINARY)
cv2.imshow('thresh',thresh)
contours,hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
isNG = False
if len(contours) > 0:
isNG = True
cv2.drawContours(img,contours,-1,(0,0,255),2)
if isNG:
rect, basline = cv2.getTextSize('Detect NG', font, 1.0, 2)
cv2.rectangle(img, (10,10,int(rect[0]*0.7),rect[1]), (212, 233, 252), -1, 8)
cv2.putText(img,'Detect NG', (10,5+rect[1]), font, 0.7, (0,0,255), 2)
else:
rect, basline = cv2.getTextSize('Detect OK', font, 1.0, 2)
cv2.rectangle(img, (10,10,int(rect[0]*0.7),rect[1]), (212, 233, 252), -1, 8)
cv2.putText(img,'Detect OK', (10,5+rect[1]), font, 0.7, (0,200,0), 2)
cv2.imshow('meshDefects', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意Halcon程式碼中建立的是正八邊形結構元素,所以我們也模仿建立如下
k1 = np.zeros((7, 7),np.uint8)
pts = np.array([[2,0],[4,0],[6,2],[6,4],[4,6],[2,6],[0,4],[0,2]],np.int32)
pts = pts.reshape((-1,1,2))
cv2.fillPoly(k1,[pts],(1,1,1),cv2.LINE_AA)
k1[5,1] = 1
k1[6,2:5] = 1
結構元素輸出如下:
為什麼用正八邊形形狀的結構元素,因為PCB的佈線圖結構和八邊形比較類似,如果換矩形結構元素,會多出更多的誤判,大家可以自己嘗試,對於結構元素的說明以前的文章以詳細說明了,這裡不做贅述,可參考
OpenCV形態學處理使用技巧與應用演示,C++ OpenCV程式碼把對應函式轉換即可。
△長按關注OpenCV與AI深度學習,獲取最新CV乾貨
相關文章
- Halcon缺陷檢測例項轉OpenCV實現(三) 物體凸缺陷檢測OpenCV
- halcon缺陷檢測
- Halcon表面缺陷檢測-劃痕檢測
- Halcon表面缺陷檢測-光度立體法檢測藥片包裝背面的缺陷
- Halcon表面缺陷檢測-光度立體法
- 影像分析,使用Halcon進行缺陷檢測
- halcon——缺陷檢測常用方法總結(測量擬合)
- halcon——缺陷檢測常用方法總結(特徵訓練)特徵
- halcon——缺陷檢測常用方法總結(光度立體)
- halcon視覺缺陷檢測系列(1)常用的6種方法視覺
- halcon——缺陷檢測常用方法總結(模板匹配(定位)+差分)
- 道路缺陷智慧檢測系統
- halcon——缺陷檢測常用方法總結(頻域空間域結合)
- 突破傳統缺陷檢測的界限,"Defect Spectrum"首次實現超高精度豐富語義的工業缺陷檢測
- 網格缺陷檢測(二值化閾值分析)
- 檢測-紋理表面凸起、凹痕、劃痕缺陷的檢測
- 布匹缺陷檢測baseline提升過程
- 深度學習之瑕疵缺陷檢測深度學習
- [機器視覺]halcon應用例項 邊緣檢測視覺
- 結合模板匹配與測量的剃鬚刀缺陷檢測
- 大模型在程式碼缺陷檢測領域的應用實踐大模型
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- 機器視覺產品尺寸測量與外觀缺陷檢測應用視覺
- 圖片人臉檢測——OpenCV版(二)OpenCV
- VS2005中檢測和更正 C/C++ 程式碼缺陷C++
- 基於opencv實現簡單人臉檢測OpenCV
- 【軟體測試】缺陷
- 遇到程式碼缺陷不要慌,馬上教你快速檢測和修復
- halcon三維檢測啟蒙1
- 如何用OpenCV在Python中實現人臉檢測OpenCVPython
- 『測試基礎』| 如何理解測試用例管理和缺陷管理?
- opencv關鍵點檢測OpenCV
- 微信域名檢測線上批次檢測如何實現?——利用域名檢測api介面實現批次檢測工具教程API
- python+opencv檢測圖片中二維碼PythonOpenCV
- 混合高斯模型實現運動目標檢測(OpenCV內建實現)模型OpenCV
- opencv視訊人臉檢測OpenCV
- 目標檢測:二維碼檢測方案
- 人眼疲勞檢測之opencv人眼檢測xml說明OpenCVXML