Halcon缺陷檢測例項轉OpenCV實現(三) 物體凸缺陷檢測
Halcon缺陷檢測例項轉OpenCV實現(一)---網格缺陷檢測
Halcon缺陷檢測例項轉OpenCV實現(二)---PCB印刷缺陷檢測
本期文章繼續介紹缺陷檢測專題的第三個案例,用OpenCV實現Halcon中一個物體凸缺陷檢測的例項,前兩個案例連結如上↑↑↑。
Halcon中對應的例子為fin.hdev,源圖均有凸起缺陷,如下圖所示:
Halcon例項對應的效果和方法大家可以自己檢視,這裡做簡單說明。核心運算元共4個:
binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
---二值化獲取右邊白色亮區域,接下來轉為檢測白色區域的凹缺陷來檢測
closing_circle (Background, ClosedBackground, 250)
---使用半徑為250的圓形結構元素做閉運算
difference (ClosedBackground, Background, RegionDifference)
---二值化結果區域與閉運算結果區域做差
opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
---5x5的結構元素做開運算,濾除邊緣噪點,剩餘真正的缺陷區域
下面介紹用Python-OpenCV來實現的步驟。第一種方法也採用上面的方式,將對應的運算元轉換成OpenCV對應的函式和方法。
(1) 二值化方法採用OTSU閾值方法,得到的效果基本與binary_threshold
(2) 閉運算結構元素採用半徑125的圓形結構元素(這一點和Halcon有差異,如果設定為250,fin2.png腐蝕過度,有可能是運算元或者結構元素差異造成)
(3) 做差使用cv2.absdiff()函式即可
(4) 開運算結構元素設定5x5圓形結構元素,效果比矩形結構元素好些
下面是完整程式碼(含關鍵步驟註釋)和檢測效果:
import numpy as np
import cv2
font = cv2.FONT_HERSHEY_SIMPLEX
img = cv2.imread('./imgs/fin1.png')
cv2.imshow('src',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# OTSU閾值
ret,background = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('thresh',background)
# 250*250圓形結構元素--閉運算
k1 = np.zeros((250, 250),np.uint8)
cv2.circle(k1,(125,125),125,(1,1,1),-1,cv2.LINE_AA)
#print(k1)
closing = cv2.morphologyEx(background, cv2.MORPH_CLOSE, k1, None, None, 1)#閉運算
cv2.imshow('closing',closing)
# 影像差分
diff = cv2.absdiff(background, closing)
cv2.imshow('diff',diff)
# 5*5圓形結構元素--開運算
#k2=np.ones((5,5), np.uint8) #矩形結構元素
k2 = np.zeros((5, 5),np.uint8)
cv2.circle(k2,(2,2),2,(1,1,1),-1,cv2.LINE_AA)
print(k2)
# 開運算
opening = cv2.morphologyEx(diff, cv2.MORPH_OPEN, k2)#閉運算
cv2.imshow('opening',opening)
# 輪廓查詢
contours,hierarchy = cv2.findContours(opening, 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('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
執行結果:
當然實現方法並不唯一,大家有好的方法可以在文末留言,歡迎大家一起交流。更多視覺影像處理相關內容不要忘記關注我們喲!
△長按關注OpenCV與AI深度學習,獲取最新CV乾貨
相關文章
- Halcon缺陷檢測例項轉OpenCV實現(二) PCB印刷缺陷檢測OpenCV
- halcon缺陷檢測
- Halcon表面缺陷檢測-劃痕檢測
- Halcon表面缺陷檢測-光度立體法
- Halcon表面缺陷檢測-光度立體法檢測藥片包裝背面的缺陷
- halcon——缺陷檢測常用方法總結(光度立體)
- 影像分析,使用Halcon進行缺陷檢測
- halcon——缺陷檢測常用方法總結(測量擬合)
- halcon——缺陷檢測常用方法總結(特徵訓練)特徵
- halcon視覺缺陷檢測系列(1)常用的6種方法視覺
- halcon——缺陷檢測常用方法總結(模板匹配(定位)+差分)
- 物體檢測實戰:使用 OpenCV 進行 YOLO 物件檢測OpenCVYOLO物件
- 道路缺陷智慧檢測系統
- halcon——缺陷檢測常用方法總結(頻域空間域結合)
- 突破傳統缺陷檢測的界限,"Defect Spectrum"首次實現超高精度豐富語義的工業缺陷檢測
- 檢測-紋理表面凸起、凹痕、劃痕缺陷的檢測
- 布匹缺陷檢測baseline提升過程
- 深度學習之瑕疵缺陷檢測深度學習
- openCV檢測物體是否運動OpenCV
- [機器視覺]halcon應用例項 邊緣檢測視覺
- 使用 Rust 和 OpenCV 進行物體檢測RustOpenCV
- halcon三維檢測啟蒙1
- 【軟體測試】缺陷
- 網格缺陷檢測(二值化閾值分析)
- 結合模板匹配與測量的剃鬚刀缺陷檢測
- 大模型在程式碼缺陷檢測領域的應用實踐大模型
- 使用 Go 語言與 OpenCV 進行物體檢測GoOpenCV
- 30秒輕鬆實現TensorFlow物體檢測
- 軟體測試--缺陷報告
- 軟體測試:軟體缺陷管理
- AI影片物體檢測AI
- C 語言實現物體檢測:使用 YOLO 模型YOLO模型
- 機器視覺產品尺寸測量與外觀缺陷檢測應用視覺
- VS2005中檢測和更正 C/C++ 程式碼缺陷C++
- 視訊人臉檢測——OpenCV版(三)OpenCV
- 基於opencv實現簡單人臉檢測OpenCV
- OPCV 移動物體檢測
- 遇到程式碼缺陷不要慌,馬上教你快速檢測和修復