#python #list #coordinates #rectangles
Вопрос:
После обнаружения края изображения у меня есть список точек, которые имеют произвольную форму, но я хочу исключить те, которые не влияют на форму прямоугольника. На следующем примере изображения две точки в левом нижнем углу (E, F) должны быть удалены, поэтому форма оставшихся точек почти прямая (так как D немного выше, это придает форму трапеции, но это не имеет значения)
Я подумал о грубой силе всех точек и сравнил их площадь, но это не гарантирует того, что вы прямой. Но я не знаю, как это реализовать на python. Если у кого-то есть лучший подход, я хотел бы его услышать, пожалуйста. Заранее спасибо.
п = [ (8,133), (78,13), (242,89), (183,217), (217,235), (213,240) ]
Ответ №1:
Лучший подход, которому вы можете следовать, — это использование наклона
Математическая формула для наклона данной прямой показана ниже.
m = (y2-y1)/(x2-x1)
так, например: если наклон (8,133), (78,13) равен (242,89), (183,217), это означает, что у нас есть 2 параллельные линии, то у нас есть прямоугольник, но это не означает, что 4 точки на 4 углах. однако они будут находиться в пределах 2 сторон прямоугольника.
Если вы хотите убедиться, что они находятся на 4 углах, вы можете вычислить наклон (8,133)(183,217) и наклон (78,13)(242,89), а затем сравнить их, если они равны, то у вас есть 4 угловые точки прямоугольника.
сначала выполните резервное копирование кода, вам понадобятся все возможные комбинации длины 4 из всех точек, чтобы выполнить это использование combinations
с itertools
from itertools import combinations p = [(8,133), (78,13), (242,89), (183,217), (217,235), (213,240)] possible_combinations = [] for comb in combinations(p, 4): possible_combinations.append(comb)
после этого примените описанный выше алгоритм к каждой комбинации, чтобы получить свой прямоугольник.