OpenCV 入门实践:基于机器视觉的零件瑕疵检测实验报告
一、实验目的
本实验旨在使用 OpenCV 进行机器视觉的入门实践,具体任务是利用 OpenCV 进行零件瑕疵检测。
二、实验环境
- 硬件环境
本实验使用的硬件环境为一台装有 Ubuntu 16.04 操作系统的笔记本电脑,配备 Intel Core i5 处理器和 8GB 内存。
- 软件环境
本实验使用的软件环境为 OpenCV 3.4.0、Python 2.7.12、Ubuntu 16.04 操作系统。
三、实验步骤
- 数据准备
本实验使用的数据为一组零件瑕疵图片,其中包括正常图片和有瑕疵的图片,如下图所示:

- 图像预处理
针对图片中的白色零件,我们需要将其转换为灰度图像,并进行二值化处理,以便于后续的处理。
代码如下:
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()
运行结果如下:

- 轮廓检测
通过轮廓检测,可以将图像中的轮廓提取出来,从而实现对零件的检测。
代码如下:
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()
运行结果如下:

- 瑕疵检测
通过对轮廓的检测,可以将零件的轮廓提取出来,接下来可以根据零件的形状、大小、位置等特征进行瑕疵检测。
代码如下:
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()
运行结果如下:

四、实验总结
本实验使用 OpenCV 进行了机器视觉的入门实践,实现了零件瑕疵检测的功能。通过本实验的实践,深入了解了 OpenCV 的基本使用方法,对机器视觉的基本原理有了更深入的认识,对于未来的研究和实践具有一定的借鉴意义。
原文地址: https://www.cveoy.top/t/topic/nYY7 著作权归作者所有。请勿转载和采集!