导读 本文主要介绍一个复杂背景下缺陷检测的实例,并将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深度学习
dfrobotXBee S2C ZigBee无线网络模块简介
打不过苹果、三星、小米、华为_LG全球处境也不容乐观
6G项目开始启动6G是什么6G会不会替代光纤
AI工程师需要懂架构吗?带你详细了解
百度自动驾驶量产计划提前到来,明年7月正式亮相
复杂背景下缺陷检测将Halcon实现转为OpenCV的实例
红米Note 7 Pro正式发布搭载骁龙675芯片支持硬件直出4800万照片
作为自动驾驶领头羊的Waymo 强势跨界到激光雷达行业
赛灵思:以全可编程使能5G 从源头引领市场
Xilinx公司的开发软件Vivado上的在线调试工具——ILA
OPPO R17:手机圈里的“好色之徒”
智慧医疗BI助你释放医疗大数据的潜力
苹果正在研发环绕触摸屏全玻璃iPhone,任意面都可充当屏幕
一种因光纤漂移引起SERDES FIFO溢出的解决方案
5G助力下 网络安全迎来机遇的同时也遇到了很大的挑战
vivo新款智能手表通过工信部认证
华为麒麟9000跑分抢先看,全面升级性能炸裂
中国PCB企业汽车业务布局完善 汽车毫米波雷达是高端PCB的重要推手
FPC柔性电路板的优势和应用,FPC测试应用弹片微针模组更稳定
小米新机已通过3C认证该机将搭载1亿像素的后置主摄像头