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、通过不同程度的膨胀腐蚀、缺陷面积筛选

以上就是Python+OpenCV实现表面缺陷检测的详细内容,更多关于Python OpenCV缺陷检测的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python opencv缺陷检测的实现及问题解决

    题目描述 利用opencv或其他工具编写程序实现缺陷检测. 实现过程 # -*- coding: utf-8 -*- ''' 作者 : 丁毅 开发时间 : 2021/4/21 15:30 ''' import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont import matplotlib.pyplot as plt #用于给图片添加中文字符的函数 def cv2ImgAddText(img, text, l

  • Python-OpenCV实现图像缺陷检测的实例

    在Jupyter Notebook上使用Python+opencv实现如下图像缺陷检测.关于opencv库的安装可以参考:Python下opencv库的安装过程与一些问题汇总. 1.实现代码 import cv2 import numpy from PIL import Image, ImageDraw, ImageFont #用于给图片添加中文字符 def ImgText_CN(img, text, left, top, textColor=(0, 255, 0), textSize=20):

  • python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

    一.利用直方图的方式进行批量的图片缺陷检测(方法简单) 二.步骤(完整代码见最后) 2.1灰度转换(将原图和要检测对比的图分开灰度化) 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比较 img = cv2.imread("0.bmp") #原图灰度转换 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #循环要检测的图,均灰度化 for i in range(1, 6): t1=cv2.cvtColor(cv2.imread

  • OpenCV凸包检测和凸缺陷学习示例

    目录 1.凸包检测与凸缺陷定义 2.opencv相关实现函数 3.代码实践 4.总结 1.凸包检测与凸缺陷定义 凸包是将最外层的点连接起来构成的凸多边形,它能包含点击中所有的点.物体的凸包检测常应用在物体识别.手势识别及边界检测等领域. 凸包检测常常用在轮廓分析之后.对二值图像进行轮廓分析之后,可以构建每个轮廓的凸包,构建完成之后会返回该凸包包含的点集.根据返回的凸包点集可以绘制该轮廓对应的凸包.一般来说,凸性曲线总是凸出来的,至少是平的.如果有地方凹进去了就被叫做凸性缺陷. 下图可以更加直接的

  • 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

  • python+opencv实现霍夫变换检测直线

    本文实例为大家分享了python+opencv实现霍夫变换检测直线的具体代码,供大家参考,具体内容如下 python+opencv实现高斯平滑滤波 python+opencv实现阈值分割 功能: 创建一个滑动条来控制检测直线的长度阈值,即大于该阈值的检测出来,小于该阈值的忽略 注意:这里用的函数是HoughLinesP而不是HoughLines,因为HoughLinesP直接给出了直线的断点,在画出线段的时候可以偷懒 代码: # -*- coding: utf-8 -*- import cv2

  • Python OpenCV调用摄像头检测人脸并截图

    本文实例为大家分享了Python OpenCV调用摄像头检测人脸并截图的具体代码,供大家参考,具体内容如下 注意:需要在python中安装OpenCV库,同时需要下载OpenCV人脸识别模型haarcascade_frontalface_alt.xml,模型可在OpenCV-PCA-KNN-SVM_face_recognition中下载. 使用OpenCV调用摄像头检测人脸并连续截图100张 #-*- coding: utf-8 -*- # import 进openCV的库 import cv2

  • python opencv角点检测连线功能的实现代码

    原始图 角点检测 points = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10) points = np.int0(points).reshape(-1,2) for point in points: x, y = point.ravel() cv2.circle(img, (x, y), 10, (0, 255, 0), -1) 连线 cv2.line(img, (0, y1), (1000, y1), (0, 255, 0), thickness=

  • python opencv实现直线检测并测出倾斜角度(附源码+注释)

    由于学习需要,我想要检测出图片中的直线,并且得到这些直线的角度.于是我在网上搜了好多直线检测的代码,但是没有搜到附有计算直线倾斜角度的代码,所以我花了一点时间,自己写了一份直线检测并测出倾斜角度的代码,希望能够帮助到大家! 注:这份代码只能够检测简单结构图片的直线,复杂结构的图片还需要设置合理的参数 下面展示 源码. import cv2 import numpy as np def line_detect(image): # 将图片转换为HSV hsv = cv2.cvtColor(image

  • Python OpenCV实现图形检测示例详解

    目录 1. 轮廓识别与描绘 1.1 cv2.findComtours()方法 1.2 cv2.drawContours() 方法 1.3 代码示例 2. 轮廓拟合 2.1 矩形包围框拟合 - cv2.boundingRect() 2.2圆形包围框拟合 - cv2.minEnclosingCircle() 3. 凸包 绘制 4. Canny边缘检测 - cv2.Canny() 4.1 cv2.Canny() 用法简介 4.2 代码示例 5. 霍夫变换 5.1 概述 5.2 cv2.HoughLin

  • Python OpenCV Hough直线检测算法的原理实现

    目录 直线检测原理 OpenCV实现 直线检测原理 核心要点:图像坐标空间.参数空间.极坐标参数空间 -> (极坐标)参数空间表决 给定一个点,我们一般会写成y=ax+b的形式,这是坐标空间的写法:我们也可以写成b=-xa+y的形式,这是参数空间的写法.也就是说,给定一个点,那么经过该点的直线的参数必然满足b=-xa+y这一条件,也就是必然在参数空间中b=-xa+y这条直线上.如果给定两个点,那么这两点确定的唯一的直线的参数,就是参数空间中两条参数直线的交点. 由于上述写法不适合处理水平或垂直的

  • python+opencv实现车道线检测

    python+opencv车道线检测(简易实现),供大家参考,具体内容如下 技术栈:python+opencv 实现思路: 1.canny边缘检测获取图中的边缘信息: 2.霍夫变换寻找图中直线: 3.绘制梯形感兴趣区域获得车前范围: 4.得到并绘制车道线: 效果展示: 代码实现: import cv2 import numpy as np def canny(): gray = cv2.cvtColor(lane_image, cv2.COLOR_RGB2GRAY) #高斯滤波 blur = c

  • 树莓派上利用python+opencv+dlib实现嘴唇检测的实现

    目录 1.安装相关库文件 2.代码部分 3.实验效果 树莓派上利用python+opencv+dlib实现嘴唇检测 项目的目标是在树莓派上运行python代码以实现嘴唇检测,本来以为树莓派的硬件是可以流畅运行实时检测的,但是实验的效果表明树莓派实时检测是不可行,后面还需要改进. 实验的效果如下: 1.安装相关库文件 这里需要用的库有opencv,numpy,dlib. 1.1 安装opencv pip3 install opencv-python 1.2 安装numpy 树莓派中自带了numpy

  • Python OpenCV学习之特征点检测与匹配详解

    目录 背景 一.Harris角点 二.Shi-Tomasi角点检测 三.SIFT关键点 四.SIFT描述子 五.SURF 六.ORB 七.暴力特征匹配(BF) 八.FLANN特征匹配 九.图像查找 总结 背景 提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类.检测任务都是至关重要的: 特征点应用的一些场景: 图像搜索:以图搜图(电商.教育领域) 图像拼接:全景拍摄(关联图像拼接) 拼图游戏:游戏领域 一.Harris角点 哈里斯角点检测主要

随机推荐