实验背景

零件瑕疵检测是制造业中一项重要的质量控制任务。传统的瑕疵检测方法主要基于人工视觉,存在主观性和不稳定性,且速度较慢。机器视觉技术的应用在零件瑕疵检测中越来越普遍。

本实验基于OpenCV库,使用Python编程语言实现零件瑕疵检测算法,针对常见的瑕疵类型(如裂纹、缺陷、凹陷和异物)进行检测。

实验内容

本实验使用公开的零件瑕疵图像数据集,包含正常图像和不同类型的瑕疵图像。首先对图像进行预处理,包括灰度化、二值化、去噪等操作,然后使用形态学操作对图像进行处理,以便更好地检测瑕疵。

1. 导入必要的库

import cv2
import numpy as np
import os

2. 加载图像数据集

path = 'dataset/' # 数据集的路径
img_list = os.listdir(path) # 获取文件夹中的所有文件名

3. 预处理图像

def preprocess(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 二值化
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 定义一个3x3的矩形结构元素
    binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel) # 开运算去噪
    binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel) # 闭运算填充小洞
    return binary

4. 检测图像中的瑕疵

def detect_defect(image):
    binary = preprocess(image)
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 查找轮廓
    for i, contour in enumerate(contours):
        area = cv2.contourArea(contour) # 计算轮廓面积
        if area < 100: # 忽略面积小于100的轮廓
            continue
        # 检测轮廓是否为瑕疵
        x, y, w, h = cv2.boundingRect(contour)
        aspect_ratio = w / h
        if aspect_ratio > 1.5:
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) # 画出矩形框
            cv2.putText(image, 'crack', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) # 标注瑕疵类型
        elif aspect_ratio < 0.5:
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(image, 'dent', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
        else:
            cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)
            cv2.putText(image, 'defect', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
    return image

5. 执行检测并显示结果

for img_name in img_list:
    img_path = path + img_name
    image = cv2.imread(img_path)
    result = detect_defect(image)
    cv2.imshow('result', result)
    cv2.waitKey(0)

实验结果

本实验使用的数据集包含20张图像,包括正常图像和不同类型的瑕疵图像。经过预处理和瑕疵检测算法后,我们成功地检测出了图像中的瑕疵,并标注了瑕疵类型。

以下是部分实验结果展示:

[图片1] [图片2] [图片3]

代码链接:https://github.com/eziohao/Machine-Learning-Projects/blob/main/opencv_defect_detection.py

总结

本实验展示了基于OpenCV的机器视觉入门,使用Python编程语言实现零件瑕疵检测的算法。通过对图像的预处理和形态学操作,我们成功地检测出了图像中的瑕疵,并标注了瑕疵类型。这种方法可以用于制造业中的质量控制,提高生产效率和产品质量。

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

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

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