0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

复杂背景下缺陷检测将Halcon实现转为OpenCV的实例

新机器视觉 来源:OpenCV与AI深度学习 作者:Color Space 2021-06-30 14:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

导读 本文主要介绍一个复杂背景下缺陷检测的实例,并将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

    文章

    714

    浏览量

    58131
  • OpenCV
    +关注

    关注

    33

    文章

    652

    浏览量

    45174
  • HALCON
    +关注

    关注

    17

    文章

    66

    浏览量

    28447
  • 深度学习
    +关注

    关注

    73

    文章

    5614

    浏览量

    124751

原文标题:Halcon转OpenCV实例--复杂背景下缺陷检测(附源码)

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SEMVision™ G9:引领高产能缺陷检测新时代

    与分类能力规模化提升,同时在保持性能扩展性的前提下,实现具有竞争力的总体拥有成本(CoO)。     为何重要 随着器件复杂度持续提升以及3D结构不断演进,缺陷分布日益密集,对缺陷
    的头像 发表于 04-07 19:02 3000次阅读
    SEMVision™ G9:引领高产能<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>新时代

    博图光电RJ45 接插件缺陷检测方案

    服务国内某大型消费电子厂商,针对 RJ45 接插件顶面、侧面、Pin 针插孔等多功能区开展外观缺陷检测。产品各表面材质不一,缺陷类型繁杂,金属面划伤、注塑面凹坑等缺陷成像微弱,易受
    的头像 发表于 03-31 13:29 187次阅读
    博图光电RJ45 接插件<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>方案

    数字滤波算法的在线电弱点测试仪:复杂电路环境的干扰信号剔除与检测精度提升

    复杂电路环境中,在线电弱点测试仪的检测精度常面临各类干扰信号的挑战。这些干扰可能源于电路自身的运行特性,也可能来自外部环境的电磁影响,若无法有效剔除,导致检测信号失真,影响电弱点隐
    的头像 发表于 01-09 09:29 516次阅读
    数字滤波算法的在线电弱点测试仪:<b class='flag-5'>复杂</b>电路环境<b class='flag-5'>下</b>的干扰信号剔除与<b class='flag-5'>检测</b>精度提升

    没有专利的opencv-python 版本

    ) 视频处理 视频读取/写入、帧提取、运动检测背景差分) 绘图功能 画直线/矩形/圆、添加文字、标注关键点 关键总结: 对 Python 3.13 来说,最优选择是安装 opencv
    发表于 12-13 12:37

    挑花眼了吧?缺陷检测不用愁,一秒教你选对型!

    分钟找到适配自己问题的产品! 缺陷检测的每款产品,都对应着特定的行业痛点,旨在通过技术创新,检测难题” 转化为 “生产优势”。从自己的痛点出发,就能选准型号,快速
    的头像 发表于 11-28 16:16 756次阅读
    挑花眼了吧?<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>不用愁,一秒教你选对型!

    【开发实例】基于GM-3568JHF开发板安装OpenCV并使用视频目标跟踪 ( CamShift)

    常用的算法。本文详细讲解这两种算法的原理、实现步骤以及如何在OpenCV中使用它们。https://bbs.elecfans.com/jishu_2497622
    的头像 发表于 09-02 08:04 1038次阅读
    【开发<b class='flag-5'>实例</b>】基于GM-3568JHF开发板安装<b class='flag-5'>OpenCV</b>并使用视频目标跟踪 ( CamShift)

    【EASY EAI Orin Nano开发板试用体验】PP-OCRV5文字识别实例搭建与移植

    ;) res.save_to_json(\"output\") 然后需要安装paddle2onnx软件,飞桨的模型文件转为ONNX格式的模型: PaddleOCR 3.0的模型文件
    发表于 08-18 16:57

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

    使用树莓派和OpenCV实时扫描并存储二维码使用树莓派和OpenCV实现物体与动物识别使用树莓派、摄像头和OpenCV进行速度检测用树莓派+
    的头像 发表于 08-16 16:16 1702次阅读
    零成本钢铁侠手套!树莓派+<b class='flag-5'>OpenCV</b> 秒变手势遥控器!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    使用树莓派和OpenCV实时扫描并存储二维码使用树莓派和OpenCV实现物体与动物识别使用树莓派、摄像头和OpenCV进行速度检测用树莓派+
    的头像 发表于 08-14 17:45 2746次阅读
    如何使用树莓派与<b class='flag-5'>OpenCV</b><b class='flag-5'>实现</b>面部和运动追踪的云台系统?

    如何使用树莓派+OpenCV实现姿态估计和面部特征点追踪?

    使用树莓派和OpenCV实时扫描并存储二维码使用树莓派和OpenCV实现物体与动物识别使用树莓派、摄像头和OpenCV进行速度检测今天是第一
    的头像 发表于 08-13 17:44 1570次阅读
    如何使用树莓派+<b class='flag-5'>OpenCV</b><b class='flag-5'>实现</b>姿态估计和面部特征点追踪?

    塑料注塑缺陷检测的创新解决方案

    在塑料成型领域,注塑制品的质量控制至关重要。然而,塑料注塑过程中出现的缺陷不仅影响产品的外观,还可能降低其功能性能。这些缺陷的产生原因复杂多样,传统的检测方法往往难以应对
    的头像 发表于 08-05 17:52 1094次阅读
    塑料注塑<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>的创新解决方案

    工业质检再升级:复杂网络检测模型破解多场景检测难题

    在工业视觉检测领域,缺陷类型多样、目标尺度差异大、图像质量参差不齐等问题,一直是企业提升质检效率的拦路虎。阿丘科技最新发布《检测工具复杂网络功能白皮书》,带来了一款针对
    的头像 发表于 07-16 15:52 914次阅读
    工业质检再升级:<b class='flag-5'>复杂</b>网络<b class='flag-5'>检测</b>模型破解多场景<b class='flag-5'>检测</b>难题

    【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测OpenCV测试

    【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测OpenCV测试 本文介绍了 Milk-V Duo S 开发板实现 Buildroot SDK 镜像编译、基于 TDL 模型的人
    发表于 07-11 13:48

    饮料液位及瓶盖缺陷检测视觉系统

    在合适的光源条件,连接了多个相机的POC系列能够成功检测到随机故意放置在产线上的有缺陷的瓶装饮料(这些缺陷包括:液位过高或过低,瓶盖未正确拧紧,标签打印错误和瓶中液体有杂质/沉淀物)
    的头像 发表于 07-09 14:28 857次阅读
    饮料液位及瓶盖<b class='flag-5'>缺陷</b><b class='flag-5'>检测</b>视觉系统

    如何FlexRay信号转为Can信号

    本篇教程源于一位客户的真实需求,想将Flexray信号通过软件转为Can信号,硬件设备有PXI-8517、cDAQ-9188、NI-9862。经过小编验证是可行的,
    的头像 发表于 07-03 09:16 1498次阅读
    如何<b class='flag-5'>将</b>FlexRay信号<b class='flag-5'>转为</b>Can信号