我遇到了一个关于从图像生成浮点坐标的问题。
原问题如下:输入图像是手写文本。由此我想生成一组组成各个字符的点(只是 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);
}
}
有没有其他选择或者我忽略了什么?
更新:
我忽略了我需要订购点(像素)的事实。在上面的方法中,我只是简单地使用扫描线方法来抓取所有像素。例如,如果您查看“o”,它将首先抓住左侧的点,然后是右侧的点。我需要它们按相邻像素排序,因为我想稍后用这些点绘制路径(在 opencv 之外)。这可能吗?