2

我需要处理从 OpenCV 获得的图像。

到目前为止,我写道:

IplImage* img=0;

img=cvLoadImage("paket2.tif");


api.SetRectangle(0,0,img->width, img->height);
api.SetImage((uchar*)img->imageData,img->width,img->height,img->depth/8,img->width*(img->depth/8));
//i tried also below line
//api.SetImage((uchar*)img->imageData,img->width,img->height,img->depth/8,img->widthStep);

int left,top,right,bottom;
left=0;top=0;right=0;bottom=0;
api.Recognize(NULL);
tesseract::ResultIterator *ri=api.GetIterator();
char * sonuc=(*ri).GetUTF8Text(tesseract::RIL_SYMBOL);

if((*ri).BoundingBox(tesseract::RIL_SYMBOL,&left,&top,&right,&bottom))
{printf("bb dogru\n");printf("%d,%d,%d,%d",left,top,right,bottom);}
printf("sonuc:%s",sonuc);

如果我将 IplImage->widthStep 传递给每行字节,我在左右值中有“错误”的边界框,并且无法读取图像中的所有文本。

如果我通过 IplImage->width*(IplImage->depth/8),boundingBox 函数返回 false。

我希望你有一些想法。提前致谢。

4

2 回答 2

2

将您的子矩阵复制到新的 IplImage。使用正确的信息(宽度、高度、步长)创建一个正方体图像标题。将 tesseract 数据指针链接到 iplImage 数据指针。

我不记得如何访问 tesseract 指针,但对于 opencv 是 image->data.ptr

于 2011-10-25T06:15:53.403 回答
1

这里的代码对我有用:

tesseract::TessBaseAPI tess; 
tess.Init(argv[0], "eng", tesseract::OEM_DEFAULT); 
cv::Mat image = cv::imread("...");
tess.SetImage((uchar*)image .data, image.size().width, image.size().height, image.channels(),     image.step1());
tess.Recognize(0);
const char* out = tess.GetUTF8Text();
于 2011-11-15T15:31:32.127 回答