OpenCV 零件瑕疵检测实验报告:图像处理与代码实现

实验目的:

本实验旨在利用 OpenCV 库实现零件瑕疵检测,掌握 OpenCV 图像处理的基本操作,包括图像读取、预处理、二值化、轮廓检测等。

实验内容:

  1. 图像读取

首先读取待检测的零件图像,使用 OpenCV 库中的 cv2.imread() 函数进行图像读取,如下所示:

import cv2
img = cv2.imread('part.jpg')
  1. 图像预处理

对于待检测的图像,需要进行一些预处理,以便更好地进行瑕疵检测。常见的预处理操作包括缩放、去噪、灰度化等。

缩放操作可以使得图像大小一致,方便后续操作。去噪操作可以去除图像中的噪声,提高瑕疵检测的准确性。灰度化操作可以将图像转化为灰度图像,简化后续操作。

# 缩放操作
img = cv2.resize(img, (800, 600))

# 去噪操作
img = cv2.GaussianBlur(img, (5, 5), 0)

# 灰度化操作
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. 二值化

接下来需要将灰度图像二值化,将其转化为黑白图像,以便进行轮廓检测。常见的二值化方法有阈值二值化、自适应二值化等。

# 阈值二值化
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)
  1. 轮廓检测

最后对二值化后的图像进行轮廓检测,利用 OpenCV 库中的 cv2.findContours() 函数可以检测出图像中的所有轮廓。

# 轮廓检测
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  1. 瑕疵识别

对于检测出的轮廓,可以利用其形状、大小、位置等特征进行瑕疵识别。例如可以根据轮廓的面积进行筛选,如果面积太小则认为是噪音,如果面积太大则认为是瑕疵。

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)

实验结果:

下图为实验结果,黑色区域表示瑕疵部位,红色线条表示轮廓。

part_detection_result

实验代码:

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()

参考文献:

  1. OpenCV 官方文档:https://docs.opencv.org/4.5.3/
  2. 深入理解 OpenCV:https://www.cnblogs.com/mikewolf2002/p/3185379.html
OpenCV 零件瑕疵检测实验报告:图像处理与代码实现

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

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