检测倾斜字体中单词之间的 space(bar)

Detecting space(bar) between words in a slanted font

我写了一个 python 脚本来检测图像中编码的字母表。该脚本使用 openCV 的模板匹配 来匹配图像中嵌入的 characters/alphabets。除了 space(spacebar) 字符外,检测工作正常。

这是一张示例图片

在python中使用(或不使用)openCV 是否有一些(easy/direct)方法来检测单词之间的白色space?

您可以沿着倾斜的垂直线扫描空白 space

  1. 扫描整张图片

  2. 计算每行的字体像素数

  3. 如果没有计算像素则发现间隙(绿线和蓝线)

  4. count joined gap lines (w)

    如果大于或等于阈值(在您的情况下为 3),则发现的间隙是单词之间的间隙(蓝线)

这是我在 C++ 中的做法:

int x,y,i,w;
picture pic0,pic1,pic2; // pic0 - original input image,pic1 output, pic2 temp

pic1=pic0;              // copy input image pic0 to pic2
pic2=pic0;              // copy input image pic0 to pic1
pic2.rgb2i();           // and convert to grayscale intensity

for (w=0,x=pic2.ys>>1;x<pic2.xs;x++)
    {
    // count pixels per skewed vertical line
    for (i=0,y=0;y<pic2.ys;y++)
     if (pic2.p[y][x-(y>>1)].dd<200) i++;
    if (!i) w++; // increment gap width
    if ((i)||(x==pic2.xs-1))
        {
        if (w>=3)   // if gap bigger then treshold
            {       // draw blue gap lines
            for (i=x,x-=w;x<i;x++)
             for (y=0;y<pic1.ys;y++)
              pic1.p[y][x-(y>>1)].dd=0x000000FF;
            }
        w=0;
        continue;
        }
    // if gap found draw green line
    for (y=0;y<pic1.ys;y++)
     pic1.p[y][x-(y>>1)].dd=0x0000FF00;
    }

这是输出的样子:

我使用自己的图片 class 作为图片,所以一些成员是:
xs,ys 是以像素为单位的图像大小
p[y][x].dd是(x,y)位置的像素,为32位整数类型
clear(color)清除整个图像
resize(xs,ys) 将图像调整为新分辨率

[备注]

这使用固定倾斜角进行扫描以使其稳健,您需要首先找到倾斜角然后沿它扫描。

最后一个间隙应该也是蓝色的我忘记执行if (w>=3)...如果最后一个x被处理而不管i。源已更新,但图片未更新。