Я пытаюсь создать наборы данных изображений для обучения классификации изображений NN для автоматизации игр.
В настоящее время я могу сделать снимок экрана игры и, используя предопределенную область интереса, сфотографироватьприблизительная область, где находится фигура, которую я пытаюсь найти.На этой картинке мне нужно найти продолговатый объект, который может быть любого цвета, который содержит 4 стрелки, которые я могу вырезать и использовать в качестве изображений в наборе данных.
Однако я застрял на обрезкепродолговатый и метод, о котором я подумал, с помощью стандартной обработки изображений и использования обнаружения Canny Edge и findContours
не могут извлечь форму.
Вот несколько оригинальных изображений:
Желаемый вывод:
Я пытаюсь найти ограничивающую рамку красного продолговатого цвета.Использование findContours
, передавая результат обнаружения краев Canny, не сработает, потому что детектор краев Canny не может различить фон и классифицировать его как кромки, а findContours
не может правильно определить продолговатый.
filename = "output1.png"
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
blurred = cv2.GaussianBlur(img, (3,3), 3)
canny = cv2.Canny(blurred, threshold1=80, threshold2=100)
im2, contours, hierachy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
area = 0
best = None
best_contour = None
if contours:
for contour in contours:
c_area = cv2.contourArea(contour)
if c_area > area and c_area <= 65000:
area = c_area
best = cv2.boundingRect(contour)
best_contour = contour
if best_contour:
cv2.rectangle(img, (best[0], best[1]), (best[0]+best[2], best[1]+best[3]), (0,255,0), 5)
В приведенном выше коде я решил использовать самый большой найденный контур и посчитать его продолговатым, потому что продолговатый, безусловно, самый большой контур, если все сделано правильно.
Если бы япродолжайте использовать Canny и findContours
, чтобы найти форму, какие улучшения могут быть сделаны.Или же можно использовать другие методы для решения этой проблемы?