Я хотел бы аппроксимировать плавные линии цепочкой отрезков.
cv2.approxPolyDP в OpenCV 3.4 показал хороший результат в случае замкнутой кривой.
Исходная кривая закрытия: Приблизительная кривая закрытия:
Но в случае открытой кривой cv2.approxPolyDP не достиг желаемого эффекта.
Исходная открытая кривая: Приблизительная открытая кривая:
В результате я хочу получить одну цепочку отрезков, но не замкнутый многоугольник,вот так (эта картинка создана Photoshop, но не программой Python):
Есть ли способ использовать 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()
Исходные фотографии, используемые в моей программе, выглядят следующим образом.
Фотография с закрытой кривой Фотография с открытой кривой