Как преобразовать контуры входного изображения в набор векторов на openCV?
Общая задача - очень своеобразный "принтер" на ардуинке. Цель - рисовать картинки, но не как плоттер (линейно), а по-умному (как бы это рисовал, например, человек :)
Что есть:
Есть программа на c++, openCV которая выделяет контуры изображения с различной глубиной и выводит матрицу градации серого - т. е. изображение конвертируется в матрицу, в которой каждый элемент это значение от 0 до 255, где 0 - белый, 1 - черный (или inverted, не принципиально).
Это сделано для того, чтобы я имел возможность вычислять координаты каждой точки/пикселя изображения, который имеет "цвет" или наличие.
Этот подход неудобен для "умного" принтера тем, что нужно вводить алгоритмы кластеризации точек, преобразования, настраивать масштаб относительно пикселей изображения и того, что будет на бумаге.. Хотя если поможете - буду только благодарен :)
Но необходимо следующее:
Необходим функционал, который позволит выделенные контуры входного изображения преобразовать в вектор/набор векторов и вывести, например в файл в каком-то читаемом правильном виде.. (для последующей отправки этого набора в сериалПорт ардуинки)
Именно вектор, так как важно, чтобы имелась возможность "идти" по этим векторам, а не по пикселям.
В описании библиотеки с трудом нашел инфу по подобным векторам, но применить не получается.
Посоветуйте, пожалуйста, что делать или в какую сторону поискать, может есть более грамотный вариант решения задачи.
Спасибо!
Что имеется в виду под словом "вектор"? Отрезок прямой?
Или нужно из растровой графики получить векторную (т.е. помимо отрезков ввести еще более сложные примитивы)?
Японский Городовой: Да, вероятно я неправильно сформулировал. Вектор имеется в виду не прямой отрезок, а сложные примитивы векторной графики в общем понимании (дуги, кривые и т.п.)
Насколько я знаю, в классическом примере из библиотеки: docs.opencv.org/doc/tutorials/imgproc/shapedescrip...
как раз речь идет о "векторных" контурах
Еще немного дополню:
По сути, на выходе я должен получить примерно следующее:
(первая непрерывная линия/дуга и т. п.)
( [id_line, x, y, 1], [id_line, x, y, 1]...[id_line, x, y, 0] );
затем другая непрерывная линия/дуга и т. п.)
( [id_line, x, y, 1], [id_line, x, y, 1]...[id_line,x, y, 0] );
Пусть id_line это некий идентификатор конкретной линии/вектора (хотя это может и не обязательно)
x, y - соответствующие координаты точки
1, 0 - начало/продолжение линии, конец линии
Potrace(TM) is a tool for tracing a bitmap, which means, transforming a bitmap into a smooth, scalable image. The input is a bitmap (PBM, PGM, PPM, or BMP format), and the default output is an encapsulated PostScript file (EPS). A typical use is to create EPS files from scanned data, such as company or university logos, handwritten notes, etc. The resulting image is not "jaggy" like a bitmap, but smooth. It can then be rendered at any resolution.