導(dǎo)讀 本文主要介紹一個(gè)復(fù)雜背景下缺陷檢測(cè)的實(shí)例,并將Halcon實(shí)現(xiàn)轉(zhuǎn)為OpenCV。
實(shí)例來源
實(shí)例來源于51Halcon論壇的討論貼: https://www.51halcon.com/forum.php?mod=viewthread&tid=1173&extra=page%3D1
Halcon實(shí)現(xiàn)
參考回帖內(nèi)容,將代碼精簡如下:
read_image (Image, ‘。/1.bmp’)dev_set_line_width (3)threshold (Image, Region, 30, 255)reduce_domain (Image, Region, ImageReduced)mean_image (ImageReduced, ImageMean, 200, 200)dyn_threshold (ImageReduced, ImageMean, SmallRaw, 35, ‘dark’)opening_circle (SmallRaw, RegionOpening, 8)closing_circle (RegionOpening, RegionClosing, 10)connection (RegionClosing, ConnectedRegions)dev_set_color (‘red’)dev_display (Image)dev_set_draw (‘margin’)dev_display (ConnectedRegions)
OpenCV實(shí)現(xiàn)
分析實(shí)現(xiàn)方法與思路: [1] 原圖轉(zhuǎn)灰度圖后使用核大小201做中值濾波; [2] 灰度圖與濾波圖像做差,然后閾值處理 [3] 圓形核做開運(yùn)算,去除雜訊 [4] 圓形核做閉運(yùn)算,缺陷連接 [5] 輪廓查找繪制 實(shí)現(xiàn)代碼(Python-OpenCV):
import cv2import numpy as np
img = cv2.imread(‘。/1.bmp’)cv2.imshow(‘src’,img)gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
mean = cv2.medianBlur(gray,201)cv2.imshow(‘mean’,mean)
#diff = cv2.absdiff(gray, mean)diff = gray - meancv2.imshow(‘diff’,diff)cv2.imwrite(‘diff.jpg’,diff)_,thres_low = cv2.threshold(diff,150,255,cv2.THRESH_BINARY)#二值化_,thres_high = cv2.threshold(diff,220,255,cv2.THRESH_BINARY)#二值化thres = thres_low - thres_highcv2.imshow(‘thres’,thres)
k1 = np.zeros((18,18,1), np.uint8)cv2.circle(k1,(8,8),9,(1,1,1),-1, cv2.LINE_AA)k2 = np.zeros((20,20,1), np.uint8)cv2.circle(k2,(10,10),10,(1,1,1),-1, cv2.LINE_AA)opening = cv2.morphologyEx(thres, cv2.MORPH_OPEN, k1)cv2.imshow(‘opening’,opening)closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, k2)cv2.imshow(‘closing’,closing)
contours,hierarchy = cv2.findContours(closing, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours: (x, y, w, h) = cv2.boundingRect(cnt) if w 》 5 and h 》 5: #cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.drawContours(img,contours,-1,(0,0,255),2)
cv2.drawContours(img,cnt,2,(0,0,255),2)cv2.imshow(‘result’,img)
cv2.waitKey(0)cv2.destroyAllWindows()print(‘Done!’)
逐步效果演示
濾波效果:mean
做差效果:diff
閾值效果:thres
開運(yùn)算效果:opening
閉運(yùn)算效果:closing
輪廓查找繪制最終結(jié)果:
結(jié)尾語
[1] 算法只是針對(duì)這一張圖片,實(shí)際應(yīng)用為驗(yàn)證算法魯棒性還需大量圖片做測(cè)試方可; [2] 缺陷檢測(cè)如果用傳統(tǒng)方法不易實(shí)現(xiàn),可以考慮使用深度學(xué)習(xí)分割網(wǎng)絡(luò)如:mask-rcnn、U-net等
—版權(quán)聲明—
來源:OpenCV與AI深度學(xué)習(xí)
編輯:jq
-
濾波
+關(guān)注
關(guān)注
10文章
671瀏覽量
56891 -
OpenCV
+關(guān)注
關(guān)注
31文章
636瀏覽量
41816 -
HALCON
+關(guān)注
關(guān)注
17文章
66瀏覽量
27436 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5527瀏覽量
121893
原文標(biāo)題:Halcon轉(zhuǎn)OpenCV實(shí)例--復(fù)雜背景下缺陷檢測(cè)(附源碼)
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
X-Ray檢測(cè)設(shè)備能檢測(cè)PCBA的哪些缺陷
背景抑制光電開關(guān)的設(shè)計(jì)及應(yīng)用
C#通過Halcon實(shí)現(xiàn)3D點(diǎn)云重繪
C#基于Halcon實(shí)現(xiàn)Basler相機(jī)采圖
接近感應(yīng)單片機(jī)在背景抑制光電開關(guān)上的應(yīng)用
基于 XD08M3232 接近感應(yīng)單片機(jī)的背景抑制光電開關(guān)設(shè)計(jì)與應(yīng)用
AI模型部署邊緣設(shè)備的奇妙之旅:如何在邊緣端部署OpenCV
如何用OpenCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--基于米爾NXP i.MX93開發(fā)板
opencv-python和opencv一樣嗎
opencv的主要功能有哪些
基于OpenCV的人臉識(shí)別系統(tǒng)設(shè)計(jì)
基于AI深度學(xué)習(xí)的缺陷檢測(cè)系統(tǒng)
Labview與Halcon圖片Image互相轉(zhuǎn)換
外觀缺陷檢測(cè)原理

評(píng)論