Обработка данных IplImage (OpenCV) в Tesseract - PullRequest
2 голосов
/ 23 октября 2011

Мне нужно обработать изображения, которые я получаю из 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 в байты perline, у меня есть «неправильный» boundingBox в левом и правом значениях и я не могу прочитать весь текст на изображении.

если я передаю IplImage-> width * (IplImage-> deep / 8), функция boundingBox возвращает false.

Надеюсь, у тебя есть идея. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Скопируйте вашу подматрицу в новый IplImage.Создайте заголовок изображения tesseract с правильной информацией (ширина, высота, шаг).Свяжите указатель данных tesseract с указателем данных iplImage.

Я не могу вспомнить, как получить доступ к указателю tesseract, но для opencv это image-> data.ptr

1 голос
/ 15 ноября 2011

Этот код работал для меня:

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();
...