Есть ли способ использовать cv2.approxPolyDP для аппроксимации открытой кривой? - PullRequest
0 голосов
/ 12 октября 2018

Я хотел бы аппроксимировать плавные линии цепочкой отрезков.

cv2.approxPolyDP в OpenCV 3.4 показал хороший результат в случае замкнутой кривой.

Исходная кривая закрытия: Origin close curve Приблизительная кривая закрытия: Approximated close curve

Но в случае открытой кривой cv2.approxPolyDP не достиг желаемого эффекта.

Исходная открытая кривая: Origin open curve Приблизительная открытая кривая: Approximated open curve

В результате я хочу получить одну цепочку отрезков, но не замкнутый многоугольник,вот так (эта картинка создана Photoshop, но не программой Python): enter image description here

Есть ли способ использовать cv2.approxPolyDP для аппроксимации открытой кривой?

Моя программа на Python выглядит следующим образом:

import cv2

img = cv2.imread('1.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow("gray", gray)
cv2.waitKey(0)

_, binary = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY)

# cv2.imshow("binary", binary)
# cv2.waitKey(0)

_, contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    epsilon = 0.009 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, closed=True)
    cv2.drawContours(img, [approx], -1, (0, 255, 255), 1)

cv2.imshow("approx", img)
cv2.waitKey(0)

cv2.destroyAllWindows()

Исходные фотографии, используемые в моей программе, выглядят следующим образом.

Фотография с закрытой кривой Фотография с открытой кривой

1 Ответ

0 голосов
/ 13 октября 2018

В соответствии с документами для approxPolyDP(), вы можете просто использовать closed=False:

closed - если true, аппроксимированная кривая закрывается (ее первая ипоследние вершины связаны).В противном случае он не будет закрыт.

Так что вы должны просто сделать:

approx = cv2.approxPolyDP(contour, epsilon, closed=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...