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、寻找到的轮廓信息(缺陷)

Python+OpenCV实现表面缺陷检测

2、通过腐蚀、膨胀后的,筛选出的较大缺陷

Python+OpenCV实现表面缺陷检测

Python+OpenCV实现表面缺陷检测

3、通过不同程度的膨胀腐蚀、缺陷面积筛选

Python+OpenCV实现表面缺陷检测

Python+OpenCV实现表面缺陷检测

Python+OpenCV实现表面缺陷检测

Python+OpenCV实现表面缺陷检测

Python+OpenCV实现表面缺陷检测

来源:https://blog.csdn.net/qq_44936246/article/details/126151769

标签:Python,OpenCV,缺陷,检测
0
投稿

猜你喜欢

  • 在IDEA的maven项目中连接并使用MySQL8.0的方法教程

    2024-01-13 09:33:37
  • vue在页面中如何使用window全局变量

    2024-05-09 15:14:49
  • 浅析python中SQLAlchemy排序的一个坑

    2023-03-29 10:47:23
  • Python中使用第三方库xlrd来读取Excel示例

    2022-04-22 06:29:41
  • numpy.insert用法及内插插0的方法

    2023-03-28 10:06:13
  • python3读取文件指定行的三种方法

    2023-03-23 12:27:20
  • Python直接赋值、浅拷贝与深度拷贝实例分析

    2023-03-15 08:08:02
  • keras自定义回调函数查看训练的loss和accuracy方式

    2021-01-11 18:13:09
  • python中如何设置list步长

    2022-11-04 14:24:02
  • Python生成指定数量的优惠码实操内容

    2021-06-12 18:29:25
  • 详解vue+webpack+express中间件接口使用

    2024-04-29 13:11:10
  • asp无限级分类

    2007-09-16 18:06:00
  • 基于Arcgis for javascript实现百度地图ABCD marker的效果

    2024-04-23 09:22:22
  • python+django+rest框架配置创建方法

    2021-10-07 02:28:52
  • 深入浅析mybatis oracle BLOB类型字段保存与读取

    2024-01-15 02:21:26
  • php基础教程 php内置函数实例教程

    2023-11-14 18:28:45
  • linux 后台日志 mysql 错误异常的解释(推荐)

    2024-01-26 06:01:42
  • python爬虫-模拟微博登录功能

    2021-12-13 21:54:08
  • Javascript typeof 用法

    2013-10-20 20:49:40
  • 报错No module named numpy问题的解决办法

    2023-09-20 12:02:07
  • asp之家 网络编程 m.aspxhome.com