2013-11-25 67 views
3

我想弄清楚如何使用Leptonica库提供的分割器进行文档分析。我一直在寻找pageseg.c,但我不认为我完全理解它:(!使用Leptonica进行字符分割

如果我把图像和加载它作为PIX数据类型,我调用pixGetRegionsBinary()来找到每个符号是然后我用文字块面膜,提取每个符号分别

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

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

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

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

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

在此先感谢!

编辑26/11/2013

任何有兴趣 - Leptonica Doxygen Documentation - Page Segmentation是整版分割的一个很好的例子!字符分割的

回答

0

实施例:

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); 
}