opencv缺陷检测

news2024/11/24 18:44:05

 

  • 随着自动化生产设备的普及,工业机器人在各行各业的应用也越来越广泛,越来越多的生产线由自动化设备取代人工操作,实现自动化生产。在机器人分拣过程中,机器人不仅可以将不同规格和质量的产品准确地放入指定的托盘中,而且能够通过视觉系统识别出物体的表面缺陷并进行分类。 随着工业4.0时代的到来,传统的基于视觉检测技术已经无法满足现代工业生产的要求,视觉检测技术成为了现代工业生产中必不可少的一部分。在机器视觉系统中,缺陷检测是非常重要的一个环节。在机器视觉系统中,缺陷检测是指在图像采集过程中,自动地将采集到的图像通过一定算法处理后,自动地对目标物体进行提取、分割、识别和跟踪。通过这些算法处理后得到目标物体信息后,自动地识别出目标物体中存在的缺陷并将其标注出来。在工业生产中,缺陷检测主要分为以下几种:

    • 一、图像分割

      图像分割就是将图像中的各部分从整体中分割出来,使图像成为具有明确边界的有意义的单元。根据分割对象的不同,可将图像分割为若干区域。图像分割是机器视觉系统中的一个基本任务,主要包括形态学、边缘检测、区域生长和阈值分割等方法。形态学算子可以直接产生边界,方便易操作;边缘检测可以获得边缘信息,适合于定位;区域生长和阈值分割方法,则可以在同一张图像上得到目标和背景的差异信息,得到较精确的目标边界。虽然图像分割方法非常多,但是这些方法都有一个共同的特点:对噪声不敏感。为了抑制噪声,人们常采用一系列算法。如:数学形态学中常用的开运算、闭运算等;基于边缘检测的方法,如 Canny算子等;基于阈值选择的方法;基于区域生长的方法等。虽然这些方法取得了很好的效果,但是由于需要手动选择阈值,因此计算量非常大。当前比较流行的图像分割技术有:基于像素灰度信息和边缘检测算法相结合、基于区域生长算法、基于数学形态学与区域生长算法相结合、基于形态学算子与阈值选择算法相结合等。

      • 1、基于像素灰度信息和边缘检测算法相结合

        这种方法将边缘检测与灰度形态学结合,从而在不需要了解目标背景的情况下,实现对目标的识别。其基本思想是利用数字图像处理中的边缘检测算子对原始图像进行处理,得到与边缘有关的局部特征信息,然后用这些特征信息来实现对目标的识别。Canny算子是目前应用最广泛、效果最好的边缘检测算子。它以像素为单位,使用灰度梯度信息,能够较为准确地检测出边缘信息。Canny算子的优点是能够准确提取边缘信息,并且对于噪声不敏感,缺点是计算量大、耗时长。为了克服 Canny算子的缺点,研究者们提出了各种改进算法。例如: (1) Hough变换(H):H不能提取边缘,但是能够获取目标和背景的差异信息。 (2)双峰法:可以去除噪声,但是会丢失目标和背景之间的信息。 (3)梯度法:对梯度幅值和方向进行分析,能够更好地提取边缘。 (4)多尺度法:能够将多个尺度的信息综合起来考虑问题,从而更加准确地检测到目标边缘信息。

      • 2、基于数学形态学与区域生长算法相结合

        数学形态学是一种通过变换图像结构元素来进行图像分析的数学工具,可以很好地消除噪声和突出目标。区域生长算法是一种基于区域的分割方法,它是将区域生长方法应用于图像分割的一种有效途径。目前,国内外对基于区域生长算法的应用研究比较多,如:张军红等人将数学形态学与区域生长相结合,利用形态学腐蚀运算对目标进行增强处理,然后对增强后的图像进行区域生长,最后得到分割结果。利用该方法得到的结果具有边缘清晰、无噪声干扰、定位准确等优点。但是该方法也有一些不足:区域生长算法在图像分割过程中需要人为确定种子点,需要手动确定阈值,且只能对简单结构元素进行分割,而对于复杂结构元素无法进行分割。

    • 二、特征提取

      图像的特征提取就是为了将图像的特征数据提取出来,作为后续处理的输入数据。通常情况下,图像特征包括以下几种: (1)灰度特征:灰度信息是机器视觉中最重要的特征之一,在图像处理中有非常广泛的应用。灰度信息是指图像中的像素值随位置变化而产生的变化信息,例如,亮度和对比度等。由于灰度信息能够在不依赖于物体形状、大小、光照条件和背景等因素的情况下进行描述,因此,它也是机器视觉中非常重要的特征。 (2)边缘检测特征:边缘检测是机器视觉中一个非常重要的研究内容。当物体被放置在光学相机拍摄时,它可以将物体表面的信息存储在光学图像传感器上,然后通过边缘检测算法来提取图像中物体表面的信息。常用的边缘检测算法有: Canny边缘检测算法、霍夫变换边缘检测算法、 Hough变换边缘检测算法。 (3)纹理特征:纹理是一种描述图像中不同对象之间相互关系的信息,它包含了物体表面各种不同特征属性,例如,粗糙度、灰度和空间分布等。对于一个特定类型的物体或物体表面来说,它应该具有特定类型的纹理信息。常见的纹理特征有:灰度共生矩阵、直方图和灰度直方图等。 (4)几何特征是指与形状相关或由形状描述的特征。根据这些特征,可以将物体分为不同类型:直线、圆柱体、长方体和长方体等。几何特征通常被用于描述物体表面形状,例如:圆形度、直线度、圆度、长宽比等。 (5)颜色特征:颜色是物体表面颜色信息与其特性之间相互关系的一种描述方式。例如,对于不同颜色的物体,它们具有不同的反射率和透射率等特性。因此,我们可以使用颜色进行缺陷检测。常见的颜色特征有: RGB (红绿蓝)、 CMYK (白)和 YCbCr (黄)等。 (6)纹理特征:纹理是指物体表面特定类型或特征信息。例如,当一个物体是圆时,它可能具有圆和非圆两种不同类型或特征属性。因此,通过使用纹理特征进行缺陷检测可以更准确地识别目标物体是否存在缺陷。

    • 三、缺陷识别

      缺陷识别是一种自动识别缺陷的方法,其基本思想是,当目标物体存在缺陷时,它会发出一定的信号,当这种信号与其周围的背景信号达到一定比例时,就会发现目标物体存在缺陷。工业机器人在生产过程中,可以通过视觉检测系统自动识别出目标物体中的缺陷并将其标注出来。随着工业生产水平的提高,这种方法也逐渐被应用到其他行业中。例如在半导体行业中,当芯片上存在缺陷时,工人会使用手持设备或机器人将芯片从基板上分离出来。

以下是几个常用的OpenCV缺陷检测代码示例:

1. 边缘检测:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 显示结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 轮廓检测:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 轮廓检测
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 直线检测:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 直线检测
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
# 绘制直线
for line in lines:
rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 显示结果
cv2.imshow('Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这些代码示例可以用于常见的缺陷检测任务,但具体应用需要根据实际情况进行调整和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 事物(w字)

目录 事物 首先我们来看一个简单的问题 什么是事务 为什么会出现事务 事务的版本支持 事务提交方式 事务常见操作方式 设置隔离级别 事物操作 事物结论 事务隔离级别 理解隔离性 隔离级别 查看与设置隔离性 注意可重复读【Repeatable Read】的可能问题&#xff…

Spring事务管理 -- Spring入门保姆级教程(五)

文章目录 前言六、Spring事务1.Spring事务简介2.入门案例--模拟银行间转账业务3.开启Spring事务的一般步骤4.Spring事务角色5.spring事务属性--rollbackfor6.入门案例进阶--转账业务追加日志7. Spring事务属性--事务传播行为 总结 前言 为了巩固所学的知识,作者尝试…

ZIP/RAR压缩包加密原理和解密方法

ZIP/RAR压缩包加密原理和解密方法 1、压缩包的概念 一般我们看到的压缩格式有.rar,.zip,等等有许多格式但主要压缩的作用就是让某一个文件占用空间小点。比如原来是50MB,可以压缩到30多MB。 压缩包的算法: 有许多不同的压缩格式例如&#…

【MySQL】-【数据库的设计规范】

文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念 为什么需要数据库设计 范式 范式简介 在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。可以理解为,一张数据表的设计结构需要满足的某种设计标准的 级别 。要…

第二届欧亚计算机科学与信息技术前沿国际会议

会议简介 Brief Introduction 2023年第二届欧亚计算机与信息技术前沿国际会议(FCSIT 2023) 会议时间:2023年9月15 -17日 召开地点:英国牛津 大会官网:www.ecfcsit.org 2023年计算机与信息技术前沿国际会议(FCSIT 2023)将围绕“计算机与信息技…

单词长度统计-列表

输入一段英文计算每个单词长度,统计不含非英文字符,列表输出。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址…

Java高并发核心编程(JUC)—线程详细笔记

进程 线程 线程方法 线程原理 线程状态 查看线程 进程 概述 进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位. 一般来说,一个进程由程序段(包含代码、指令集合)、数据段(进程…

Gitlab的使用教程

Gitlab的基本介绍: Gitlab是利用Ruby on Rails 一个开源的版本管理系统,实现一个自托管的git项目仓库,可通过web界面进行访问公开或私有的项目。 与GitHub类似,Gitlab能够浏览源代码、管理缺陷和注释、可以管理团队对仓库的访问…

YSL赢麻了?SMI社媒心智品牌榜Top20公布:YSL破局夺魁,国货品牌现后起之秀

全文速览 1.数说故事联合用户说从美妆、彩妆、护肤三板块全新发布《SMI社媒心智品牌榜》。 2.圣罗兰、兰蔻、欧莱雅等法国高端美妆大牌垄断美妆《SMI社媒心智品牌榜》前三甲。 3.彩妆Top20榜单中,底妆产品稳居前列,色彩美妆占据一席之地。 4.护肤TOP…

Java面试知识点(全)-分布式微服务-zookeeper面试知识点

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现&…

现在转行想学云计算?这些知识你需要提前掌握!

现在转行想学云计算?这些知识你需要提前掌握! 近年来,云计算技术和应用正铺天盖地向我们袭来,工作、生活、娱乐、教育、金融、科技、工业、农业等各个领域都有他的身影。什么是“云”?“云”是一个庞大的可容纳海量资源…

医疗科普系统和微信小程序开箱即用

一.下载地址 http://www.gxcode.top/code 二.项目说明 运行环境:jdk8tomcat8mysql5.7IntelliJ IDEAmaven微信开发工具 这是一个ssmvue微信小程序的医疗科普小程序,分为pc端和微信小程序端, pc端包括:管理员角色和学生角色。 管…

【LeetCode】168. Excel表列名称

168. Excel表列名称(简单) 思路 显然,这是一道从 1 开始的的 26 进制转换题。 对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 算,将已经取得…

【项目源码】基层医院信息化管理系统HIS源码

医院信息系统(HIS)经历了从手工到单机再到局域网的两个阶段,随着云计算、大数据新技术迅猛发展,基于云计算的医院信息系统将逐步取代传统局域网HIS,以适应人们对医疗卫生服务越来越高的要求。 利用云计算、大数据等现代信息技术研…

Windows下安装docker

Windows下安装docker 1.安装WSL2 我的Windows版本如下: 版本 Windows 11 专业版 版本 22H2 1.1 检查能否安装 必要条件: Windows 10 对于 x64 系统:版本 1903 或更高版本,内部版本为 18362 或更高版本。对于 ARM64 系统&…

5个值得一试的开源大语言模型

5个值得一试的开源大语言模型 人工智能已经成为我们生活中不可或缺的一部分,而LLM(大型语言模型)处于这一变化的最前沿。 在对话式人工智能方面,大语言模型的性能最为关键。 虽然像 OpenAI 的 GPT-4 这样的商业大语言模型已经引起…

jdk13至15——文本块特性

文本块在jdk13中第一次预览,jdk14第二次预览,jdk15正式版; 终于不用在多行字符串中加一堆\n和一堆\"和一堆了; 之前需要这么麻烦: Testvoid test() {String s "testabcd\n" "aaa\n" "…

【机器学习】贝叶斯分类与概率图模型

文章目录 第五章 贝叶斯分类与概率图模型5.1、贝叶斯决策与贝叶斯分类5.1.1、贝叶斯基本原理5.1.2、朴素贝叶斯分类器(naive bayes)5.1.3、半朴素贝叶斯 5.2、有向图与无向图一般概念5.2.1、有向图5.2.2、无向图5.2.3、条件独立性5.2.4、图模型推理的概念…

海睿思分享 | 浅谈企业数据资产管理

1、什么是数据资产 与实物资产、无形资产一样,数据资产首先表现为是一种资源。也就是说,并非所有的数据资源都可以升级为数据资产。作为“资产”的数据资源,大体表现为以下两种形式:一是可以通过合理应用创造出新的价值。二是通过…

【k8s】Jenkins实现Java springboot应用CI、CD实践 【二】

一、运行Jenkins流水线流程思路: 场景1:常规java应用,使用jenkins pipeline 交付到Kubernetes集群中1、准备好java代码、Dockerfile、 deploy. yaml资源清单文件CI阶段: 1、获取代码 2、漏洞扫描 3、检测漏洞扫描结果,如果正常则…