Использование OpenCV для обнаружения прозрачных фигур на изображении - PullRequest
0 голосов
/ 27 октября 2018

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

В настоящее время я могу сделать снимок экрана игры и, используя предопределенную область интереса, сфотографироватьприблизительная область, где находится фигура, которую я пытаюсь найти.На этой картинке мне нужно найти продолговатый объект, который может быть любого цвета, который содержит 4 стрелки, которые я могу вырезать и использовать в качестве изображений в наборе данных.

Однако я застрял на обрезкепродолговатый и метод, о котором я подумал, с помощью стандартной обработки изображений и использования обнаружения Canny Edge и findContours не могут извлечь форму.

Вот несколько оригинальных изображений:

Желаемый вывод:

enter image description here

Я пытаюсь найти ограничивающую рамку красного продолговатого цвета.Использование 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, чтобы найти форму, какие улучшения могут быть сделаны.Или же можно использовать другие методы для решения этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...