Python OpenCV - получить координаты границ элементов внутри изображения - PullRequest
0 голосов
/ 06 сентября 2018

Я знаю, что мой вопрос может показаться немного общим, но я читаю много блогов и вопросов по этому поводу и до сих пор не могу найти решение, которое бы приблизилось к тому, что я пытаюсь сделать. У меня есть прикрепленный образец скриншота IG. Моя цель - получить координаты элементов, которые я выделил зеленым цветом. Похоже, хитрые ребра ничего не делают (см. Также https://opencv -python-tutroals.readthedocs.io / en / latest / py_tutorials / py_imgproc / py_canny / py_canny.html ). Я читал, что преобразование Хуга могло бы помочь (https://pysource.com/2018/03/07/lines-detection-with-hough-transform-opencv-3-4-with-python-3-tutorial-21/), но все равно не повезло. Все, что мне нужно, это способ получить эти разделы и получить их координаты. Если бы кто-то мог просто указать мне, какие методы могут помочь мне, это было бы полезно.

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Предполагая, что они не зеленые в реальных данных!

Стандартным способом является обнаружение края (canny или adaptiveThreshold ), а затем контур. Упростите контуры, используя ок.

Подсказка: используйте cv2.minAreaRect () , чтобы проверить наличие контуров, которые, вероятно, имеют размер / форму / выравнивание блока

Вы можете использовать вероятностное значение Hough для поиска отрезков, но поскольку исходное изображение очень чистое, проще всего просматривать контуры

0 голосов
/ 06 сентября 2018

Здравствуйте, я думаю, вы могли бы сделать следующее:

  1. Поскольку вы действительно определили цвет ограничивающего прямоугольника, вы можете извлечь этот цвет из этого изображения в другое изображение (image_green).

  2. Теперь, когда у вас есть image_green бинаризовать его (image_bin) i, ​​e. Создайте массив с двумя цветами: извлеченный и передний план.

    1. Выполните цикл по матрице image_bin и найдите все «углы», которые будут всеми парами пикселей, которые соответствуют этому условию image_bin[i:i+2,j]/max(image_bin.flatten()) == [1,0] для любого j (столбец) и i (строка).
    2. Сохранить эти координаты ([i,j]). Как я уже упоминал ранее, эти значения представляют 2 угла прямоугольника: левый верхний угол и правый нижний угол.

Этот подход используется с массивами-пустышками, поэтому, как вы можете себе представить, вам нужно преобразовать изображение в массив до шага 3. Если у вас все еще есть проблемы с этим, сообщите мне, и когда у меня будет свободное время, я опубликую код, который делает это.

Удачи!

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