【问题标题】:Using Leptonica for Character Segmentation使用 Leptonica 进行字符分割
【发布时间】:2013-12-10 07:04:11
【问题描述】:

我正在尝试弄清楚如何使用 Leptonica 库提供的分段器进行文档分析。我一直在看pageseg.c,但我认为我并不完全理解它:(!

如果我拍摄图像并将其作为 PIX 数据类型加载,我是否调用 pixGetRegionsBinary() 来查找每个符号的位置?然后我是否使用文本块掩码分别提取每个符号?

如果我理解正确,我会有这样的代码:

Pix* page = pixRead("myImage.tif");

Pix** halftone;
Pix** textline;
Pix** textblock;

if ( pixGetRegionsBinary( page, halftone, textline, textblock, 0 ) )
{
     //..error message
}

现在是文本块中的所有字符还是我使用了错误的分割方法:)?另外我怎么知道文本块“数组”何时结束?

提前致谢!!

2013 年 11 月 26 日编辑

对于任何感兴趣的人 - Leptonica Doxygen Documentation - Page Segmentation 是整页分割的一个很好的例子!

【问题讨论】:

    标签: image-segmentation leptonica


    【解决方案1】:

    字符分割示例:

    void CharacterSegmentation(string filename) {
       PIX * image = pixRead(filename.c_str());
       PIX * binaryImage = pixConvertTo1(image , 250);
       Boxa* connectedBox = pixConnCompBB(binaryImage, 4); 
       for (int i = 0; i < connectedBoxes ->n; i++) {
          BOX* box = boxaGetBox(connectedBox , i, L_CLONE);
          fprintf(stdout, "Box[%d]: x=%d, y=%d, w=%d, h=%d\n", i, box->x, box->y, box->w, box->h);
          BOX* boxd = boxCreate(box->x, box->y, box->w, box->h);
          SaveCharacterImage(image, boxd);
          boxDestroy(&boxd);  
          boxDestroy(&binaryImage);
       }
       pixDestroy(&image);
       pixDestroy(&binaryImage);    
    } 
    
    void SaveCharacterImage(PIX* image, BOX* rectangle) {
       PIX* pixd = pixClipRectangle(pixa, boxd, NULL);
       string s = to_string(i) + ".png";
       pixWrite(s.c_str(), pixd, 1);
       pixDestroy(&pixd); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 2022-07-06
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多