Я столкнулся с проблемой создания координат с плавающей точкой из изображения.OpenCV: Создание точек из изображения после разбавления
Исходная проблема заключается в следующем: входное изображение - рукописный текст. Из этого я хочу создать набор точек (только x, y координат), которые составляют отдельные символы.
Сначала я использовал findContours для создания точек. Так как это находит края символов, в первую очередь нужно пропустить алгоритм прореживания, так как меня не интересует форма символов, указывает только строки или как в этом случае.
Вход:
прореживание:
Итак, я веду свой вход через алгоритм утончения и все нормально, выход хорошо выглядит. Запуск findContours на этом, однако, не так хорошо работает, он пропускает много вещей, и я получаю что-то непригодное.
Вторая идея заключалась в создании ограничивающих прямоугольников (с помощью findContours), используя эти ограничивающие поля, чтобы захватить символы из процесса прореживания и захватить все небелые пиксельные индексы как «точки» и смещать их по позиции ограничивающей рамки. Это приводит к еще большему результату и кажется плохим методом.
Ужасного код для этого:
Mat temp = new Mat(edges, bb);
byte roi_buff[] = new byte[(int) (temp.total() * temp.channels())];
temp.get(0, 0, roi_buff);
int COLS = temp.cols();
List<Point> preArrayList = new ArrayList<Point>();
for(int i = 0; i < roi_buff.length; i++)
{
if(roi_buff[i] != 0)
{
Point tempP = bb.tl();
tempP.x += i%COLS;
tempP.y += i/COLS;
preArrayList.add(tempP);
}
}
Есть ли какая-либо альтернатива или я с видом что-то?
UPDATE:
я проглядел тот факт, что мне нужно точек (пикселей), которые можно заказать. В вышеприведенном методе я просто использую метод scanline для захвата всех пикселей. Если вы посмотрите, например, на «o», он сначала возьмет точку с левой стороны, затем одну с правой стороны. Мне нужно, чтобы их заказывали соседние пиксели, так как я хочу рисовать пути с точками позже (за пределами opencv). Возможно ли это?
Обновлен вопрос с результатом ввода и истончением. – prayforbacon