Как найти координаты прямоугольников из изображения в Python с OpenCV? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть несколько несовершенных прямоугольников на изображении, мне нужен набор координат для каждого прямоугольника в python, используя opencv

Я пробовал обнаружение краев Canny и использовал findContours, но он дает больше координат, чем требуется, потому что у прямоугольников нет прямых линий

Я читал похожие вопросы, но не получаю правильных результатов. Можете ли вы предоставить решение с кодом?

оригинальное изображение original После обнаружения края Canny Canny edge detection

Как получить только внутренние границы прямоугольников от Canny Edges? Поскольку для каждого прямоугольника есть двойная граница, это дает больше прямоугольников, чем требуется.

image = cv2.imread(OUTPUT_FILE)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.blur(gray, (5,5))

kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)

edged = cv2.Canny(closing, 30, 200)
cv2.imshow("Canny", edged)
contours, hierarchy = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

print(len(contours))

for c in contours:
    rect = cv2.minAreaRect(c)
    box = cv2.boxPoints(rect)

    for p in box:
        pt = (p[0],p[1])
        plt.scatter(p[0],p[1])

plt.show()

1 Ответ

0 голосов
/ 25 апреля 2019

Я думаю, что эту проблему можно решить с помощью findContours (), в зависимости от вашей версии OpenCV, он возвращает несколько значений, но одно из них всегда contours , которое представляет собой список всех точекконтур.Один из советов, который я часто использую, заключается в том, что я вычисляю центр тяжести всех точек контура.Это означает, что я суммирую все точки вдоль x координаты, суммирую их и делю на длину списка контуров для этого конкретного контура , и делаю то же самое для y координат.

Вы также можете использовать функцию boundingRect () , которая даст вам координаты x, y верхнего левого угла ограничительной рамки, а также ее ширину и высоту.По ссылке выше вы можете найти действительно хороший учебник по теме.Я думаю, что эта функция лучше подходит для вашей проблемы.

Удачи!

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