opencv缺陷检测

 

  • 随着自动化生产设备的普及,工业机器人在各行各业的应用也越来越广泛,越来越多的生产线由自动化设备取代人工操作,实现自动化生产。在机器人分拣过程中,机器人不仅可以将不同规格和质量的产品准确地放入指定的托盘中,而且能够通过视觉系统识别出物体的表面缺陷并进行分类。 随着工业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()
```
这些代码示例可以用于常见的缺陷检测任务,但具体应用需要根据实际情况进行调整和优化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Puppeteer入门实践

环境 1、安装nodejs 官网:https://nodejs.org/zh-cn 下载安装好nodejs只后 验证:node -v 出现版本号表示安装成功,否则需要配置环境变量 2、创建node项目并初始化 随便新建一个文件夹 进入文件夹搜索cmd回车 执行npm init -y 安装依赖 …

软件测试基础知识整理(八)- 软件缺陷

目录 一、软件缺陷 1.1 缺陷定义 1.2 缺陷判定标准 1.3 软件缺陷产生的原因 1.4 软件缺陷产生的根源 1.5 软件缺陷信息 1.5.1 缺陷状态 1.5.2 缺陷严重程度 1.5.3 缺陷优先级 1.6 缺陷报告模板 1.7 缺陷报告注意事项 1.8 缺陷跟踪流程 1.9 缺陷数据分析关注的问题 …

【ETH】以太网----PHY芯片LAN8720A----电路原理图

一、LAN8720A----简介 LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片,I/0 引脚电压符合EEE802.3-2005 标准,支持通过 RMI 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 和 100Mbps。 LAN87…

内蒙古自治区住房和城乡建设分析及解决方案

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘 要:为深入贯彻落实《国务院办公厅关于印发新能源汽车产业发展规划(2021—2035年)的通知》(国办发 ﹝2020﹞39号)、《国家发展改革委等部门关于进一步提升…

java前后端分离有详细内容吗?

微服务架构java前后端分离都有哪些具体内容?目前,有不少客户朋友经常询问我们类似的问题。其实,在新的经济发展形势下,提质增效的低代码开发平台微服务架构早已成为不少新老客户的选择,它们不仅能提高办公协作效率&…

多商户商城系统开发功能优势与选择技巧

电商行业的持续发展,让越来越多的商家企业开始选择入驻多商户商城,通过该系统不仅能够为消费者提供更加便捷良好的购物体验,而且也能够为企业提供一个高效稳定的电商平台,可以说是未来电商行业发展的重要趋势。那么多商户商城系统…

Spring之DI(依赖注入)

依赖注入(DI)是一个过程,在这个过程中,对象仅通过构造函数参数、工厂方法的参数或在对象被实例化后通过属性设置来定义它们的依赖项(即与该对象一起工作的其他对象)。然后,容器在创建 bean 时注…

Hadoop HA(高可用)搭建

ZooKeeper配置 解压安装 添加ZK环境变量 分发文件 启动 安装配置 Hadoop 解压安装 修改hadoop-env.sh文件 修改Hadoop配置文件core-site.xml HDFS 配置文件hdfs-site.xml MapReduce 配置文件 mapred-site.xml YARN 配置文件yarn-site.xml 配置worekers 分发配…

数字孪生智慧路灯可视化系统 区域控制节能增效

前言 智慧灯杆是智慧城市建设的重要组成部分,可以完成照明、公安、市政、气象、环保、通信等行业数据信息的采集、发布和传输。同时,作为5g时代车联网、云网、通信网络建设的重要组成部分,智慧灯杆也将得到广泛应用。 建设背景 城市路灯存…

Python学习笔记——《吴恩达Machine Learning》线性回归例程

文章目录 案例背景线性回归(Loss Regression)梯度下降法(批量梯度下降算法——batch gradient descent)计算成本函数和梯度下降使用线性回归拟合训练数据模型预测 梯度下降效果可视化完整版demo 案例背景 详情参照吴恩达机器学习…

linux共享内存总结

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成 头文件&#xff1a; #include <sys/ipc..h> #include<sys/shm.h> // 创建或获取一个共享内存: 成功返回共享内存ID&#xff0c;失败返回-1 int shmget (key_t key, size_t_size, int flag); // 连接共享内…

相见恨晚的5款良心软件,每款都是经过时间检验的精品

今天来给大家推荐5款良心软件,每款都是经过时间检验的精品,用起来让你的工作效率提升飞快&#xff0c;各个都让你觉得相见恨晚&#xff01; 1.颜色选择器——ColorPicker ColorPicker是一款用于在屏幕上选择颜色的工具。它可以让你快速地获取任意像素的颜色值,并复制到剪贴板…

android aidl及binder基础知识总结

1、什么是binder binder是android framework提供的&#xff0c;用于跨进程方法调用的机制&#xff0c;具有安全高效等特点。 我们知道&#xff0c;在 Android 系统中&#xff0c;每个应用程序都运行在一个独立的进程中&#xff0c;各个进程之间需要进行数据交换和调用&#x…

SolidWorks装配体中让弹簧随装配体运动的方法

弹簧是我们日常设计中最常用的几种零部件之一&#xff0c;但是弹簧不跟螺栓一样装好之后是相对静止的&#xff0c;弹簧在装配好后需要进行运动&#xff0c;在SolidWorks装配体中可以让弹簧跟随其他物体运动&#xff0c;操作分为三大步&#xff1a; 一、创建弹簧&#xff08;使…

三阶段项目

DHCP分配不到冲突地址 需要重启 再分配 用这个命令 reset ip pool name vlan40 all ospf&#xff1a; 建立邻居表&#xff1a;报文&#xff1a;hello报文 状态&#xff1a;down int 2-way 选举DR 同步数据库&#xff1a;报文&#xff1a;DD-LSR-LSU-LSACK 状态&#xff…

分布式协调服务--zookeeper

目录 一、概述 1、zookeeper有两种运行状态 zookeeper架构的角色&#xff1a; 2、Paxos算法&#xff1a;消息传递的一致性算法 3、ZAB协议 Zab 协议实现的作用 Zab协议核心 Zab协议内容 消息广播 崩溃恢复 实现原理 协议实现 一、概述 zookeeper官网 zookeeper官…

神马网络——IP地址

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

transformers两个入门示例

根据《attention is all you need》论文而形成的transformers框架在chat-gpt应用中大放异彩&#xff0c;目前transformers框架已经成了炙手可热的框架。它不仅在nlp方面很作用很大&#xff0c;根据官网的介绍&#xff0c;它还可以做很多事情&#xff0c;比如图片分类&#xff0…

【firewalld防火墙】

目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…

5.24 基础题目

快速幂 #include<bits/stdc.h> using namespace std; //126348976 982638476 938420413 int main(){int a,b,p;cin>>a>>b>>p;long long res 1,ci1;int flag0;if(b0){res%p;}else{while(b){if (flag0)cia%p;elseci(ci%p)*(ci%p)%p;if (b&1)res(res…