实验目的

使用 OpenCV 对图像进行瑕疵检测,主要包括以下内容:

  1. 图像预处理:灰度化、二值化、去噪。
  2. 瑕疵检测:使用轮廓检测、形状匹配等方法对瑕疵进行检测和定位。

实验步骤

  1. 导入 OpenCV 库,读取待处理图像。
import cv2
import numpy as np

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

(1) 灰度化

灰度化是将彩色图像转换为灰度图像,可以减少计算量,提高处理速度。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

(2) 二值化

二值化将灰度图像转换为黑白图像,方便后续的处理。

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

(3) 去噪

使用高斯滤波器对图像进行去噪处理。

blur = cv2.GaussianBlur(binary, (3, 3), 0)
  1. 瑕疵检测

(1) 轮廓检测

使用 findContours 函数寻找图像中的轮廓。

contours, hierarchy = cv2.findContours(blur, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

(2) 形状匹配

使用 matchShapes 函数对轮廓进行形状匹配,找出与模板轮廓最相似的轮廓。

for cnt in contours:
    match = cv2.matchShapes(cnt, template, 1, 0.0)
    if match < 0.1:
        cv2.drawContours(img, [cnt], -1, (0, 0, 255), 2)

实验结果

原始图像:

image

处理后的二值化图像:

image

检测结果图像:

image

完整代码

import cv2
import numpy as np

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

# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

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

# 去噪
blur = cv2.GaussianBlur(binary, (3, 3), 0)

# 寻找轮廓
contours, hierarchy = cv2.findContours(blur, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 形状匹配
for cnt in contours:
    match = cv2.matchShapes(cnt, template, 1, 0.0)
    if match < 0.1:
        cv2.drawContours(img, [cnt], -1, (0, 0, 255), 2)

# 显示结果
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV 瑕疵检测实验:方法、代码和结果

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

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