本实验旨在通过 OpenCV 实现零件瑕疵检测。主要包括以下步骤:

  1. 读取图像并转化为灰度图像。

  2. 对图像进行预处理,包括高斯滤波和二值化。

  3. 利用形态学操作对图像进行处理,去除噪点和孤立的小区域。

  4. 利用轮廓检测和形状匹配识别出瑕疵区域。

  5. 在图像上标出瑕疵区域并输出结果。

代码如下:

import cv2
import numpy as np

# 读取图像并转换为灰度图像
img = cv2.imread('part.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波和二值化处理
blur = cv2.GaussianBlur(gray, (5,5), 0)
ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# 形态学操作
kernel = np.ones((3,3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)

# 轮廓检测和形状匹配
contours, hierarchy = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    area = cv2.contourArea(cnt)
    if area > 1000:
        approx = cv2.approxPolyDP(cnt, 0.02*cv2.arcLength(cnt, True), True)
        if len(approx) == 4:
            cv2.drawContours(img, [cnt], 0, (0,0,255), 3)

# 输出结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

其中,cv2.imread() 函数用于读取图像,cv2.cvtColor() 函数用于将图像转换为灰度图像,cv2.GaussianBlur() 函数用于进行高斯滤波,cv2.threshold() 函数用于进行二值化处理,cv2.morphologyEx() 函数用于进行形态学操作,cv2.findContours() 函数用于进行轮廓检测和形状匹配,cv2.drawContours() 函数用于在图像上标出瑕疵区域。

实验结果如下图所示:

result

从结果可以看出,程序成功地检测出了零件的瑕疵区域。

OpenCV 机器视觉入门:零件瑕疵检测实验报告(附代码)

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

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