groupRectangles на OpenCV не работает, как ожидалось

Вышеуказанные ответы хороши для конкретного примера, который был показан, но пропустите несколько полезных случаев для более общего вопроса о естественном роде. Я только что получил один из этих случаев, поэтому создал более тщательное решение:

def natural_sort_key(string_or_number):
    """
    by Scott S. Lawton  2014-12-11; public domain and/or CC0 license

    handles cases where simple 'int' approach fails, e.g.
        ['0.501', '0.55'] floating point with different number of significant digits
        [0.01, 0.1, 1]    already numeric so regex and other string functions won't work (and aren't required)
        ['elm1', 'Elm2']  ASCII vs. letters (not case sensitive)
    """

    def try_float(astring):
        try:
            return float(astring)
        except:
            return astring

    if isinstance(string_or_number, basestring):
        string_or_number = string_or_number.lower()

        if len(re.findall('[.]\d', string_or_number)) <= 1:
            # assume a floating point value, e.g. to correctly sort ['0.501', '0.55']
            # '.' for decimal is locale-specific, e.g. correct for the Anglosphere and Asia but not continental Europe
            return [try_float(s) for s in re.split(r'([\d.]+)', string_or_number)]
        else:
            # assume distinct fields, e.g. IP address, phone number with '.', etc.
            # caveat: might want to first split by whitespace
            # TBD: for unicode, replace isdigit with isdecimal
            return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_or_number)]
    else:
        # consider: add code to recurse for lists/tuples and perhaps other iterables
        return string_or_number

Тестовый код и несколько ссылок (вкл и выкл StackOverflow) находятся здесь: http: // productarchitect .com / code / better-natural-sort.py

Обратная связь приветствуется. Это не должно быть окончательным решением; просто шаг вперед.

2
задан zindarod 13 July 2018 в 13:20
поделиться

1 ответ

Я изменил параметр eps на 0,05.

results = cv2.groupRectangles(np.concatenate((rect_old, rect_old)),1,eps=0.05)[0]
img2 = img.copy()
for r in results:
    cv2.rectangle(img2,(r[0], r[1]),(r[2], r[3]),(255,0,0),1)

EDIT

Вот некоторая информация о параметры принимают больше на этой странице :

Параметры:

  • rectList - вектор ввода / вывода прямоугольников. Выходной вектор включает в себя сохраненные и сгруппированные прямоугольники. (Список Python не изменяется на месте.)
  • groupThreshold - Минимальное возможное количество прямоугольников минус 1. Порог используется в группе прямоугольников, чтобы сохранить его.
  • eps - Относительная разница между сторонами прямоугольников, чтобы объединить их в группу.
0
ответ дан Jeru Luke 17 August 2018 в 12:45
поделиться
  • 1
    Спасибо за этот ответ! Кажется, что он делает работу, даже для других графиков, которые я обрабатываю. Я не вижу, как изменение этого параметра напрямую приведет к результату, но я предполагаю, что мне придется более внимательно изучить алгоритм. Еще - спасибо за ответ! – hl teoh 13 July 2018 в 16:19
  • 2
    @hlteoh Благодаря вам я узнаю эту функцию. Я бы очень хотел, чтобы это помогло, если бы это помогло. Вы также можете отметить ответ как принятый , если это помогло. – Jeru Luke 15 July 2018 в 19:37
Другие вопросы по тегам:

Похожие вопросы: