#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)
После обнаружения строк (следовательно, сегментации) вы можете легко найти дефекты.