OpenCV 机器视觉入门:零件瑕疵检测实验报告(附代码)
本次实验旨在利用 OpenCV 机器视觉技术实现零件瑕疵检测。具体实现过程如下:
- 首先需要读取零件图片,并将其转换为灰度图像。
import cv2
img = cv2.imread('part.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- 接下来需要对图像进行二值化处理,将图像中的零件与背景分离。
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
- 使用形态学操作进行图像处理,去除噪声和小的区域。
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
sure_bg = cv2.dilate(opening, kernel, iterations=3)
- 寻找零件的轮廓,并进行轮廓分析。
contours, hierarchy = cv2.findContours(sure_bg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)
area = cv2.contourArea(cnt)
if area < 300:
continue
aspect_ratio = float(w) / h
if aspect_ratio < 1.0:
aspect_ratio = 1.0 / aspect_ratio
if aspect_ratio > 3.0:
continue
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
- 最后将处理后的图像显示出来。
cv2.imshow('result', img)
cv2.waitKey(0)
完整代码如下:
import cv2
img = cv2.imread('part.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
sure_bg = cv2.dilate(opening, kernel, iterations=3)
contours, hierarchy = cv2.findContours(sure_bg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)
area = cv2.contourArea(cnt)
if area < 300:
continue
aspect_ratio = float(w) / h
if aspect_ratio < 1.0:
aspect_ratio = 1.0 / aspect_ratio
if aspect_ratio > 3.0:
continue
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('result', img)
cv2.waitKey(0)
运行结果如下图所示:

可以看到,程序成功识别出零件的轮廓,并将其用绿色矩形框标出,实现了零件瑕疵检测的功能。
总的来说,本次实验通过使用 OpenCV 库,结合二值化、形态学操作、轮廓分析等技术,实现了零件瑕疵检测的目标。这些技术和方法在机器视觉领域有着广泛的应用,对于深入理解机器视觉技术和应用具有重要意义。
原文地址: https://www.cveoy.top/t/topic/nY0U 著作权归作者所有。请勿转载和采集!