Упростите путь, используя кривые в Python - PullRequest
0 голосов
/ 16 февраля 2020

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

В этом примере у меня есть молоток, который определяется 902 баллами. В Illustrator я могу использовать команду «Упростить», чтобы уменьшить эти точки до 33 с точностью 95%:

enter image description here

Я хотел бы выполнить эту операцию прямо в Python но я не знаю как.

# Get the main contour of the hammer
contours, hierarchy = cv.findContours(u, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=lambda x: cv.contourArea(x), reverse=True)

# Write the non-optimized SVG
to_svg(f'output/{i}.svg', contours[1])

def to_svg(filename, contour, width=lightbox_size[0], height=lightbox_size[1]):
    f = open(filename, 'w+')
    data = ' '.join([f"{x/dpi*25.4} {y/dpi*25.4}" for ((x, y),) in contour])
    f.write('<svg '
        f'width="{width} mm" '
        f'height="{height} mm" '
        f'viewBox="0 0 {width} {height}" '
        'xmlns="http://www.w3.org/2000/svg">'
        f'<path d="M{data}"/>'
        '</svg>'
    )
    f.close()

Есть ли способ иметь такую ​​функцию, как:

new_svg_contour = optimize_contour (svg_contour, точность = 95)

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