У меня есть объект, и я бы хотел определить его точный центр. Используя OpenCV, я обнаруживаю края с Canny
, а затем я выполняю HoughLinesP
для обнаружения линий: see this.Обнаружение точной центральной точки прямоугольного объекта с использованием HoughLinesP
Я использую преобразование Hough, потому что объект не является полностью прямоугольным, а иногда обнаруживаются удары here.
Линии определены в структуре. Я также вычислить среднюю точку, угол и длину:
struct hLine {
Point pStart, pEnd, pMidpoint;
float angle;
int length;
};
Как вы можете видеть, что есть несколько линий, обнаруженных по бокам.
Вопрос: Как получить самую длинную линию для каждой стороны прямоугольника (0, 1, 3, 4 в данном случае)?
подход я попытался было вычислить уравнение линии у = кх + п, а затем отсортировать строки от угла, длины и п и держать только те строки, которые имеют п разделены на некоторое число (противоположные стороны прямоугольника). У меня проблема с вертикальными линиями (n не может быть рассчитана), а также когда объект почти вертикальный n номер большой, поэтому строка не удаляется.
Следующий шаг - рассчитать пересечения линий, а затем рассчитать центр. Идея основана на этом уроке: opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/
Кроме того, если кто-то имеет лучшее решение для обнаружения точного центральной точки, пожалуйста, говорить :)
Я действительно не понимаю третью и четвертую операцию. Какие моменты я должен отбросить? –
@SimonG. Третий - это угловые точки, четвертый - это точки, которые удалены/удары (ваш термин) (отрицательное влияние на минимальную границу края) –