Использование opencv Я распознаю контур инструмента, который дает мне список точек. Затем я хотел бы написать эту форму в виде файла svg для последующего редактирования в Inkscape или Illustrator.
В этом примере у меня есть молоток, который определяется 902 баллами. В Illustrator я могу использовать команду «Упростить», чтобы уменьшить эти точки до 33 с точностью 95%:
Я хотел бы выполнить эту операцию прямо в 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)