обнаружение дефектов в строках с помощью opencv

#python #opencv #image-processing

#python #opencv #обработка изображений

Вопрос:

Я работаю над алгоритмом поиска дефектов на изображениях печатной электроники, подобных этому,

введите описание изображения здесь

Я пытаюсь использовать findContours , но лучший результат, который я получаю, это,

введите описание изображения здесь

Я использую этот код:

 import cv2
import numpy as np


def damageDetection(img):
   
    imgBW = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    imgThresh = cv2.adaptiveThreshold(imgBW, 255,
                                      cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                      cv2.THRESH_BINARY, 801, 0)

    kernel = np.ones((5,5), np.uint8)
    imgEro = cv2.erode(imgThresh, kernel, iterations=1)
    imgDil = cv2.dilate(imgEro, kernel, iterations=1)

    contours, hierarchy = cv2.findContours(imgDil, cv2.RETR_EXTERNAL,
                                           cv2.CHAIN_APPROX_NONE)

    for cnt in contours:
        if cv2.contourArea(cnt) > 500:
            cv2.drawContours(img, cnt, -1, (0, 255, 0), 3)

    return img
 

Я студент бакалавриата, и это для моей бакалаврской диссертации. Было бы здорово, если бы у кого-нибудь был совет для меня! Спасибо.

Комментарии:

1. Вы должны предоставить вручную аннотированное ожидаемое выходное изображение.

2. В чем проблема / вопрос?

Ответ №1:

Вот частичный код и вывод (для обнаружения строк):

 import cv2
import numpy as np
from matplotlib import pyplot as plt
im = cv2.imread("line.png")

imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(imgray,255,cv2.ADAPTIVE_THRESH_MEAN_C,
            cv2.THRESH_BINARY,101,3)

lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 400, minLineLength=10, maxLineGap=200)
for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(im, (x1, y1), (x2, y2), (255, 0, 0), 5)

plt.imshow(im)
 

Вывод: введите описание изображения здесь

После обнаружения строк (следовательно, сегментации) вы можете легко найти дефекты.