对于现在很多工业检测,特别是对一些精密的器件进行筛选,往往都是像素级别的,十分的精确。本文将利用OpenCV+Python实现表面缺陷检测,感兴趣的可以了解一下
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、通过不同程度的膨胀腐蚀、缺陷面积筛选
python os模块使用方法介绍2022-08-08
python基础教程之csv文件的写入与读取2022-08-08
Python BautifulSoup 节点信息2022-08-08
Python使用 OpenCV 进行图像投影变换2022-08-08
详解Python中的 type()函数2022-08-08
python文件数据分析治理提取2022-08-08
Python中使用Frozenset对象的案例详解2022-08-08
美国设下计谋,用娘炮文化重塑日本,已影响至中国2021-11-19
时空伴随者是什么意思?时空伴随者介绍2021-11-09
工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终2021-11-05
2022年放假安排出炉:五一连休5天 2022年所有节日一览表2021-10-26
电脑版 - 返回首页
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号