Python+OpenCV实现表面缺陷检测
作者:醉公子~ 发布时间:2021-10-17 21:25:21
标签:Python,OpenCV,缺陷,检测
对于现在很多工业检测,特别是对一些精密的器件进行筛选,往往都是像素级别的,十分的精确。
主要思想
将图像转化为二值图像
在对图像进行腐蚀/膨胀处理
在进行轮廓检测
筛选目标大小符合的轮廓(排除误差小的轮廓)
在在进行膨胀化处理,将轮廓信息绘制出
import cv2
import os
import numpy as np
import time
t1 = time.time()
img = cv2.imread('./label/28901647.jpg', 0)
img_copy = cv2.imread('./label/28901647.jpg', 0)
mask = np.zeros_like(img)
print(np.shape(img))
# 先利用二值化去除图片噪声
ret, img = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY)
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (4, 2))
img = cv2.dilate(img, es, iterations=1) # 形态学膨胀
kernel = np.ones(shape=[5,5],dtype=np.uint8)
img = cv2.erode(img,kernel=kernel) # 腐蚀操作
cv2.imshow('aa',img)
cv2.waitKey(0)
contours, _ = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
n = len(contours) # 轮廓的个数
cv_contours = []
for contour in contours:
area = cv2.contourArea(contour)
if area <= 500:# 筛选面积大于500的,小于500的全部变为255,
cv_contours.append(contour)
# 方式一
# x, y, w, h = cv2.boundingRect(contour) # 这个函数可以获得一个图像的最小矩形边框一些信息,参数img是一个二值图像,它可以返回四个参数,左上角坐标,矩形的宽高 (轮廓集合 contour)
# img[y:y + h, x:x + w] = 255
else:
cv2.drawContours(img_copy, [contour], -1, (0, 0, 255), 0) # 多边形轮廓绘制
print('area:', area)
continue
# 方式二
cv2.fillPoly(img, cv_contours, (255, 255, 255)) # 多个多边形填充
t2 = time.time()
print('时间:',t2-t1)
cv2.imwrite('./output/28901647.jpg', img)
1、寻找到的轮廓信息(缺陷)
2、通过腐蚀、膨胀后的,筛选出的较大缺陷
3、通过不同程度的膨胀腐蚀、缺陷面积筛选
来源:https://blog.csdn.net/qq_44936246/article/details/126151769


猜你喜欢
- 一、I/O模型IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执
- 一、什么是数据类型其实可以明白数据类型指的就是变量值的不同类型,姓名可能是一种数据类型、年龄可能是一种数据类型、爱好可能又是另一种数据类型二
- 首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分):per_thread_buff
- 为标签添加背景图片import sysfrom PyQt5.QtGui import *from PyQt5.QtCore import *
- 1、查看数据类型In [11]: arr = np.array([1,2,3,4,5])In [12]: arrOut[12]: array
- # 建表CREATE TABLE `T_TEST` ( `Id` int(11) NOT NULL AUTO_INCREMENT
- 网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率
- 1. 下载资源官网下载地址: 点此进入直接点击下载,会自动开始下载。2. 开始安装将下载的安装包解压到本地,右键-以管理员身份运行setup
- 在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染html页面分页内容,这
- 大家好,我是Peter~本文讲解的是如何利用Pandas函数求解两个DataFrame的差集、交集、并集。模拟数据模拟一份简单的数据:In
- 我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点: 1. 不安全:有被SQL注入的风险。 2. 可能会影响性能:每条SQL语
- 前言在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己。秉承着“
- 先创建表,然后生成批量数据。在models文件里from django.db import models# Create your mode
- 开启debug模式在app.run()中传递参数,使用debug = True开启:app.run(debug=True)设置配置项,以配置
- 每天工作忙,学会python自动收发邮件,代替你问候女友1、相关库介绍1)yagmailYet Another GMAIL/SMTP cli
- 各位码农朋友们一定有碰到过这样的情况:在develop分支上辛辛苦苦撸了一通代码后开发出功能模块A,B,C,这时老板过来说,年青人,我们现在
- 前言最近学习了 django 的一个 restframework 框架,对于里面的执行流程产生了兴趣,经过昨天一晚上初步搞清楚了执行流程(部
- 但是问题有三个:1、我们不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。2
- 本文实例讲述了python自动化测试之从命令行运行测试用例with verbosity,分享给大家供大家参考。具体如下:实例文件recipe
- pytorch 输出中间层特征:tensorflow输出中间特征,2种方式:1. 保存全部模型(包括结构)时,需要之前先add_to_col