OpenCV 零件瑕疵检测实验报告:图像处理与代码实现
OpenCV 零件瑕疵检测实验报告:图像处理与代码实现
实验目的:
本实验旨在利用 OpenCV 库实现零件瑕疵检测,掌握 OpenCV 图像处理的基本操作,包括图像读取、预处理、二值化、轮廓检测等。
实验内容:
- 图像读取
首先读取待检测的零件图像,使用 OpenCV 库中的 cv2.imread() 函数进行图像读取,如下所示:
import cv2
img = cv2.imread('part.jpg')
- 图像预处理
对于待检测的图像,需要进行一些预处理,以便更好地进行瑕疵检测。常见的预处理操作包括缩放、去噪、灰度化等。
缩放操作可以使得图像大小一致,方便后续操作。去噪操作可以去除图像中的噪声,提高瑕疵检测的准确性。灰度化操作可以将图像转化为灰度图像,简化后续操作。
# 缩放操作
img = cv2.resize(img, (800, 600))
# 去噪操作
img = cv2.GaussianBlur(img, (5, 5), 0)
# 灰度化操作
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- 二值化
接下来需要将灰度图像二值化,将其转化为黑白图像,以便进行轮廓检测。常见的二值化方法有阈值二值化、自适应二值化等。
# 阈值二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 自适应二值化
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
- 轮廓检测
最后对二值化后的图像进行轮廓检测,利用 OpenCV 库中的 cv2.findContours() 函数可以检测出图像中的所有轮廓。
# 轮廓检测
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
- 瑕疵识别
对于检测出的轮廓,可以利用其形状、大小、位置等特征进行瑕疵识别。例如可以根据轮廓的面积进行筛选,如果面积太小则认为是噪音,如果面积太大则认为是瑕疵。
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area < 50 or area > 1000:
continue
cv2.drawContours(img, contours, i, (0, 0, 255), 2)
实验结果:
下图为实验结果,黑色区域表示瑕疵部位,红色线条表示轮廓。

实验代码:
import cv2
# 图像读取
img = cv2.imread('part.jpg')
# 缩放操作
img = cv2.resize(img, (800, 600))
# 去噪操作
img = cv2.GaussianBlur(img, (5, 5), 0)
# 灰度化操作
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 阈值二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 自适应二值化
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# 轮廓检测
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 瑕疵识别
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area < 50 or area > 1000:
continue
cv2.drawContours(img, contours, i, (0, 0, 255), 2)
# 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
参考文献:
- OpenCV 官方文档:https://docs.opencv.org/4.5.3/
- 深入理解 OpenCV:https://www.cnblogs.com/mikewolf2002/p/3185379.html
原文地址: https://www.cveoy.top/t/topic/nY8O 著作权归作者所有。请勿转载和采集!