一、实验目的

通过学习使用 OpenCV 库中的图像处理相关函数,掌握基本的机器视觉技术,实现零件瑕疵检测。

二、实验原理

零件瑕疵检测是机器视觉应用的典型案例之一,其基本流程如下:

  1. 图像采集:使用相机等设备对待检测的零件进行拍摄,获取待检测的图像。
  2. 图像预处理:对采集的图像进行预处理,包括灰度化、滤波、二值化等操作,以便后续的处理。
  3. 特征提取:根据待检测零件的特征,提取出与瑕疵有关的特征信息。
  4. 瑕疵检测:通过特征提取的结果,对图像中的瑕疵进行检测,判断零件是否存在瑕疵。
  5. 结果输出:根据瑕疵检测的结果,输出检测结果,包括瑕疵位置、类型等信息。

在本实验中,我们将使用 OpenCV 库中的函数实现图像的预处理、特征提取和瑕疵检测。

三、实验内容

本实验的主要内容是利用 OpenCV 库实现零件瑕疵检测,具体步骤如下:

  1. 图像采集:使用相机等设备对待检测的零件进行拍摄,获取待检测的图像。在本实验中,我们使用的是预先准备好的图像文件。

  2. 图像预处理:对采集的图像进行预处理,包括灰度化、滤波、二值化等操作,以便后续的处理。具体步骤如下:

    (1) 读取图像文件并显示:

    import cv2
    
    img = cv2.imread('part.jpg', cv2.IMREAD_COLOR)  # 读取彩色图像
    cv2.imshow('Original Image', img)  # 显示原图像
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    

    (2) 灰度化:

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度化
    cv2.imshow('Gray Image', gray)  # 显示灰度图像
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    

    (3) 滤波:

    blur = cv2.GaussianBlur(gray, (5, 5), 0)  # 高斯滤波
    cv2.imshow('Blur Image', blur)  # 显示滤波后的图像
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    

    (4) 二值化:

    ret, binary = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)  # 二值化
    cv2.imshow('Binary Image', binary)  # 显示二值化后的图像
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    
  3. 特征提取:根据待检测零件的特征,提取出与瑕疵有关的特征信息。在本实验中,我们将使用图像中的轮廓信息进行特征提取,具体步骤如下:

    contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  # 提取轮廓
    cv2.drawContours(img, contours, -1, (0, 0, 255), 2)  # 绘制轮廓
    cv2.imshow('Contours Image', img)  # 显示绘制轮廓后的图像
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    
  4. 瑕疵检测:通过特征提取的结果,对图像中的瑕疵进行检测,判断零件是否存在瑕疵。在本实验中,我们将检测轮廓的面积是否符合要求,判断是否存在瑕疵,具体步骤如下:

    for i in range(len(contours)):
        area = cv2.contourArea(contours[i])  # 计算轮廓面积
        if area < 500:  # 判断面积是否符合要求
            cv2.drawContours(img, contours, i, (0, 255, 0), 2)  # 绘制瑕疵轮廓
            cv2.putText(img, 'defect', tuple(contours[i][0][0]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)  # 在瑕疵轮廓上标注文字
    cv2.imshow('Defect Image', img)  # 显示检测结果
    cv2.waitKey(0)  # 等待按键
    cv2.destroyAllWindows()  # 关闭所有窗口
    

四、实验结果

经过图像预处理、特征提取和瑕疵检测,我们得到了零件瑕疵检测的结果,如下图所示:

image

可以看出,经过检测,该零件存在一个瑕疵,检测结果正确。

五、实验总结

本实验通过使用 OpenCV 库中的函数实现了零件瑕疵检测,掌握了基本的机器视觉技术,包括图像预处理、特征提取和瑕疵检测等。同时也了解到了在实际应用中,需要根据具体情况选择不同的算法和参数,以达到更好的检测效果。

基于 OpenCV 的机器视觉入门实验:零件瑕疵检测

原文地址: https://www.cveoy.top/t/topic/nZA5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录