美文网首页
缺陷检测程序

缺陷检测程序

作者: 大龙10 | 来源:发表于2023-10-05 13:14 被阅读0次

书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857


二、理论基础

3、最小包围圆形

  • 在计算轮廓时,可能并不需要确定实际的轮廓,只需要得到一个轮廓的近似多边形。
    OpenCV提供了多种计算轮廓近似多边形的方法。

  • 函数minEnclosingCircle通过迭代算法构造一个对象面积最小的包围圆形。

4、筛选标准

  • 轮廓与原始对象高度拟合,包含的信息非常丰富。
  • 通过一个对象的最小包围圆形与其轮廓面积的比值,能够将不规则的圆形筛选出来,从而实现缺陷检测


三、缺陷检测步骤

  • 预处理:
    该步骤主要是为了方便进行后续处理,主要包含:色彩空间转换处理、阈值处理、形态学处理(开运算)。
  • 使用距离交换函数distanceTransform确定距离:
    该步骤使用距离变换函数distanceTransform确定每一个像素点距离最近背景点的距离。
  • 通过阈值确定前景:
    将距离背景点大于一定长度的像素点判定为前景点。
  • 去噪处理:
    对确定的前景点进行再次处理,去除图像内的噪声信息。本步骤通过开运算完成。
  • 提取轮廓:
    使用轮廓提取函数提取上述处理结果图像内的轮廓。
  • 缺陷检测:
    本步骤是程序的核心步骤,主要步骤如下。
    • 计算面积:
      分别计算外接圆面积A和轮廓面积B。
    • 面积比较:
      计算B:A的比值,并根据比值进行判断。若比值大于阈值T,则说明轮廓与外接圆较一致,认为当前对象是圆形的;
      否则,认为当前对象是残缺的,是次品。
  • 显示结果:
    显示最终处理结果。

缺陷检测程序的完整流程图如图所示。


缺陷检测程序的完整流程图

四、缺陷检测程序

运行结果
import numpy as np
import cv2
# ====step1 读取图像=====
img = cv2.imread('d:\\pill.jpg')
cv2.imshow("pill",img)

# ====step2 预处理=====
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)) #核
opening1 = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 1)

# ====step3 完成距离的计算,确定前景=====
dist_transform = cv2.distanceTransform(opening1,cv2.DIST_L2,3)
ret, fore = cv2.threshold(dist_transform,0.3*dist_transform.max(),255,0) 

# ====step4  去噪处理====
kernel = np.ones((3,3),np.uint8)
opening2 = cv2.morphologyEx(fore,cv2.MORPH_OPEN,kernel)

# ====step5 提取轮廓 ====
opening2 =np.array(opening2,np.uint8)
contours,hirearchy=cv2.findContours(opening2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

# ====step6 缺陷检测 ====
count = 0
font = cv2.FONT_HERSHEY_COMPLEX
for cnt in contours:
    (x,y),radius= cv2.minEnclosingCircle(cnt)
    center=(int(x),int(y))
    radius=int(radius)
    circle_img=cv2.circle(opening2,center,radius,(255,255,255),1)
    area=cv2.contourArea(cnt)
    area_circle=3.14*radius*radius
    if area/area_circle>=0.5:
        img=cv2.putText(img,'OK',center,font,1,(255,255,255),2)
    else:
        img=cv2.putText(img,'BAD',center,font,1,(255,255,255),2)
    count+=1

img=cv2.putText(img,'sum='+str(count),(20,30),font,1,(255,0,255),2)

# ====step5 显示处理结果 ====
cv2.imshow("result",img)

cv2.waitKey()
cv2.destroyAllWindows()

相关文章

网友评论

      本文标题:缺陷检测程序

      本文链接:https://www.haomeiwen.com/subject/ogeybdtx.html