以倾斜字体检测单词之间的空格(条形)

时间:2015-06-26 21:00:23

标签: python opencv image-processing ocr

我写了一个python脚本来检测图像中编码的字母。该脚本使用 openCV的templateMatching 来匹配图像中嵌入的字符/字母。除了空格(空格键)字符外,检测工作正常。

这是一个示例图像
    enter image description here

在python中使用(或不使用)openCV是否有一些(简单/直接)方法来检测单词之间的空白?

1 个答案:

答案 0 :(得分:2)

您可以沿倾斜的垂直线扫描空白区域

  1. 扫描整个图片
  2. 计算每行字体数
  3. 如果没有计算像素,则找到间隙(绿线和蓝线)
  4. 计算加入的差距行(w

    如果更宽或等于阈值(在你的情况下为3)那么找到的差距是单词之间的差距(蓝线)

  5. 这就是我在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;
        }
    

    这是输出的样子:

    example

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

    <强> [注释]

    这使用固定的倾斜角度进行扫描以使其强大,您需要首先找到倾斜角度,然后沿着它扫描。

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