导读 本文主要介绍一个复杂背景下缺陷检测的实例,并将Halcon实现转为OpenCV。
实例来源
实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/forum.php?mod=viewthread&tid=1173&extra=page%3D1
Halcon实现
参考回帖内容,将代码精简如下:
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实现
分析实现方法与思路: [1] 原图转灰度图后使用核大小201做中值滤波; [2] 灰度图与滤波图像做差,然后阈值处理 [3] 圆形核做开运算,去除杂讯 [4] 圆形核做闭运算,缺陷连接 [5] 轮廓查找绘制 实现代码(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
开运算效果:opening
闭运算效果:closing
轮廓查找绘制最终结果:
结尾语
[1] 算法只是针对这一张图片,实际应用为验证算法鲁棒性还需大量图片做测试方可; [2] 缺陷检测如果用传统方法不易实现,可以考虑使用深度学习分割网络如:mask-rcnn、U-net等
—版权声明—
来源:OpenCV与AI深度学习
编辑:jq
-
滤波
+关注
关注
10文章
669浏览量
56803 -
OpenCV
+关注
关注
31文章
635浏览量
41616 -
HALCON
+关注
关注
16文章
66浏览量
27343 -
深度学习
+关注
关注
73文章
5521浏览量
121661
原文标题:Halcon转OpenCV实例--复杂背景下缺陷检测(附源码)
文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
X-Ray检测设备能检测PCBA的哪些缺陷
背景抑制光电开关的设计及应用
接近感应单片机在背景抑制光电开关上的应用
基于 XD08M3232 接近感应单片机的背景抑制光电开关设计与应用
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
基于OpenCV的人脸识别系统设计
基于AI深度学习的缺陷检测系统
Labview与Halcon图片Image互相转换
外观缺陷检测原理
![外观<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>原理](https://file1.elecfans.com//web2/M00/F0/21/wKgaomZwBCCAKxwBAAP2HBGJUAE045.jpg)
基于深度学习的芯片缺陷检测梳理分析
![基于深度学习的芯片<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>梳理分析](https://file1.elecfans.com/web2/M00/C0/E8/wKgZomXa31uAB_R6AAAVwpLznTQ304.png)
评论