基于 OpenCV 的机器视觉入门实验:零件瑕疵检测
一、实验目的
通过学习使用 OpenCV 库中的图像处理相关函数,掌握基本的机器视觉技术,实现零件瑕疵检测。
二、实验原理
零件瑕疵检测是机器视觉应用的典型案例之一,其基本流程如下:
- 图像采集:使用相机等设备对待检测的零件进行拍摄,获取待检测的图像。
- 图像预处理:对采集的图像进行预处理,包括灰度化、滤波、二值化等操作,以便后续的处理。
- 特征提取:根据待检测零件的特征,提取出与瑕疵有关的特征信息。
- 瑕疵检测:通过特征提取的结果,对图像中的瑕疵进行检测,判断零件是否存在瑕疵。
- 结果输出:根据瑕疵检测的结果,输出检测结果,包括瑕疵位置、类型等信息。
在本实验中,我们将使用 OpenCV 库中的函数实现图像的预处理、特征提取和瑕疵检测。
三、实验内容
本实验的主要内容是利用 OpenCV 库实现零件瑕疵检测,具体步骤如下:
-
图像采集:使用相机等设备对待检测的零件进行拍摄,获取待检测的图像。在本实验中,我们使用的是预先准备好的图像文件。
-
图像预处理:对采集的图像进行预处理,包括灰度化、滤波、二值化等操作,以便后续的处理。具体步骤如下:
(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() # 关闭所有窗口 -
特征提取:根据待检测零件的特征,提取出与瑕疵有关的特征信息。在本实验中,我们将使用图像中的轮廓信息进行特征提取,具体步骤如下:
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() # 关闭所有窗口 -
瑕疵检测:通过特征提取的结果,对图像中的瑕疵进行检测,判断零件是否存在瑕疵。在本实验中,我们将检测轮廓的面积是否符合要求,判断是否存在瑕疵,具体步骤如下:
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() # 关闭所有窗口
四、实验结果
经过图像预处理、特征提取和瑕疵检测,我们得到了零件瑕疵检测的结果,如下图所示:

可以看出,经过检测,该零件存在一个瑕疵,检测结果正确。
五、实验总结
本实验通过使用 OpenCV 库中的函数实现了零件瑕疵检测,掌握了基本的机器视觉技术,包括图像预处理、特征提取和瑕疵检测等。同时也了解到了在实际应用中,需要根据具体情况选择不同的算法和参数,以达到更好的检测效果。
原文地址: https://www.cveoy.top/t/topic/nZA5 著作权归作者所有。请勿转载和采集!