Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Halcon缺陷检测实例转OpenCV实现(三)

Halcon缺陷检测实例转OpenCV实现(三)

作者头像
Color Space
发布于 2020-12-22 01:50:23
发布于 2020-12-22 01:50:23
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

本期文章继续介绍缺陷检测专题的第三个案例,用OpenCV实现Halcon中一个物体凸缺陷检测的实例,前两个案例链接如上↑↑↑。

Halcon中对应的例子为fin.hdev,源图均有凸起缺陷,如下图所示:

Halcon实例对应的效果和方法大家可以自己查看,这里做简单说明。核心算子共4个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)

---二值化获取右边白色亮区域,接下来转为检测白色区域的凹缺陷来检测

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
closing_circle (Background, ClosedBackground, 250)

---使用半径为250的圆形结构元素做闭运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
difference (ClosedBackground, Background, RegionDifference)

---二值化结果区域与闭运算结果区域做差

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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圆形结构元素,效果比矩形结构元素好些


下面是完整代码(含关键步骤注释)和检测效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

运行结果:

当然实现方法并不唯一,大家有好的方法可以在文末留言,欢迎大家一起交流。更多视觉图像处理相关内容不要忘记关注我们哟!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Halcon缺陷检测实例转OpenCV实现(二)
本期来用OpenCV实现Halcon中一个简单的PCB印刷缺陷检测实例。
Color Space
2020/12/22
1.4K0
Halcon缺陷检测实例转OpenCV实现(二)
Halcon转OpenCV实例--复杂背景下缺陷检测(附源码)
导读 本文主要介绍一个复杂背景下缺陷检测的实例,并将Halcon实现转为OpenCV。 实例来源 实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/foru
Color Space
2021/07/01
2.2K0
Halcon实例转OpenCV之焊点检测
Halcon例程中有一个焊点检测例程ball.hdev,大家可以在例程中搜索查看,如下是实例使用的测试图和运行结果图:
Color Space
2020/11/25
1.2K0
Halcon实例转OpenCV之焊点检测
Halcon缺陷检测实例转OpenCV实现(一)
Halcon中对应的例子为novelty_detection_dyn_threshold.hdev,如下:
Color Space
2020/12/08
1.4K0
Halcon转OpenCV实例--利用颜色信息提取与背景相似字符
有时候遇到待提取的目标与背景颜色很接近,我们无法直接用阈值处理将其分割,只能尝试其他方法,今天介绍的实例就是如此。
Color Space
2020/10/29
2K0
Halcon转OpenCV实例--利用颜色信息提取与背景相似字符
交流群里的两个实例--直接放源码了
本文主要介绍交流群里的两个实例,直接放源码。(公众号:OpenCV与AI深度学习)
Color Space
2022/09/26
6400
Halcon缺陷检测实例转OpenCV实现(四)
Halcon中对应的例子为check_blister.hdev,用于检测药片包装中是否有错的药片或漏装的药片,检测效果如下:
Color Space
2020/12/22
1.2K0
Halcon缺陷检测实例转OpenCV实现(四)
三个OpenCV目标分割计数实例(附源码)
中间执行结果略去,大家可以复制源码和图片自己运行,查看中间结果,简单来做个总结:
Color Space
2023/10/18
9830
三个OpenCV目标分割计数实例(附源码)
实战 | 粘连物体分割与计数应用(一)--基于形态学+连通域处理 Halcon/OpenCV实现比较
本文主要介绍基于基于形态学+连通域处理实现粘连物体的分割与计数方法,并对比Halcon与OpenCV实现差异。
Color Space
2021/11/04
6.5K0
实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)
本文主要介绍一个复杂背景下OCR数字提取识别实例,并将Halcon实现转为OpenCV。
Color Space
2021/10/09
2.2K0
实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)
Halcon缺陷检测实例转OpenCV实现(六) 瓶口缺陷检测
Halcon中对应的例子为inspect_bottle_mouth.hdev,用于检测酒瓶瓶口是否出现破损等缺陷情形,检测效果如下:
Color Space
2021/01/08
4K0
OpenCV与图像处理(三)
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
Must
2020/07/28
7720
OpenCV与图像处理(三)
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
HSV 的色相范围为 [0,179],饱和度范围为 [0,255],值范围为 [0,255]。不同的软件使用不同的规模。
机器视觉CV
2019/07/15
3.1K0
OpenCV Python 系列教程 4 - OpenCV 图像处理(上)
【OpenCV】Chapter8.形态学图像处理
形态学的基本思想是利用结构元素测量或提取输入图像中的形状或特征,以便进行图像分析和目标识别。
zstar
2022/09/27
1.2K0
【OpenCV】Chapter8.形态学图像处理
二值形态学之开运算和闭运算
开闭运算是二值形态学的重要部分,是对腐蚀和膨胀算法的扩展应用,在图像的去噪方面也是十分的常用。
mythsman
2022/11/14
1.2K0
二值形态学之开运算和闭运算
opencv 2 -- 形态学处理
一、 图像腐蚀 图像腐蚀: 卷积核沿着图像滑动,如果与卷积核对应的原图 像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。
wust小吴
2019/07/08
5980
实用技巧 | OpenCV快速计算直线/网格线交点坐标(附源码)
① 在知道直线方程的前提下(或知道直线上一点和直线角度),联立方程求解交点坐标(注意数学坐标系和图像坐标系的关系);
Color Space
2021/07/01
3.8K0
实用技巧 | OpenCV快速计算直线/网格线交点坐标(附源码)
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
本文给大家分享一个电感元件定位实例,并附Halcon和OpenCV实现步骤和代码。
Color Space
2022/04/06
1.1K0
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
Halcon转OpenCV实例--保险丝颜色识别(附源码)
实例来源于Halcon例程color_fuses.hdev--classify fuses by color
Color Space
2023/11/06
6090
Halcon转OpenCV实例--保险丝颜色识别(附源码)
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
红目香薰
2023/02/10
4300
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
推荐阅读
相关推荐
Halcon缺陷检测实例转OpenCV实现(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验