一、实验目的

本实验旨在使用 OpenCV 进行机器视觉的入门实践,具体任务是利用 OpenCV 进行零件瑕疵检测。

二、实验环境

  1. 硬件环境

本实验使用的硬件环境为一台装有 Ubuntu 16.04 操作系统的笔记本电脑,配备 Intel Core i5 处理器和 8GB 内存。

  1. 软件环境

本实验使用的软件环境为 OpenCV 3.4.0、Python 2.7.12、Ubuntu 16.04 操作系统。

三、实验步骤

  1. 数据准备

本实验使用的数据为一组零件瑕疵图片,其中包括正常图片和有瑕疵的图片,如下图所示:

image

  1. 图像预处理

针对图片中的白色零件,我们需要将其转换为灰度图像,并进行二值化处理,以便于后续的处理。

代码如下:

import cv2

# 读取图片
img = cv2.imread('test.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 显示处理后的图像
cv2.imshow('thresh', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

image

  1. 轮廓检测

通过轮廓检测,可以将图像中的轮廓提取出来,从而实现对零件的检测。

代码如下:

import cv2

# 读取图片
img = cv2.imread('test.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 轮廓检测
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)

# 显示处理后的图像
cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

image

  1. 瑕疵检测

通过对轮廓的检测,可以将零件的轮廓提取出来,接下来可以根据零件的形状、大小、位置等特征进行瑕疵检测。

代码如下:

import cv2

# 读取图片
img = cv2.imread('test.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 轮廓检测
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 瑕疵检测
for contour in contours:
    # 计算轮廓面积
    area = cv2.contourArea(contour)
    if area < 1000:
        # 绘制红色矩形框标记瑕疵区域
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 显示处理后的图像
cv2.imshow('defects', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

image

四、实验总结

本实验使用 OpenCV 进行了机器视觉的入门实践,实现了零件瑕疵检测的功能。通过本实验的实践,深入了解了 OpenCV 的基本使用方法,对机器视觉的基本原理有了更深入的认识,对于未来的研究和实践具有一定的借鉴意义。

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

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

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