Convertir Mat a PIX para establecer Imagen

Estoy tratando de reconocer el texto de una imagen recortada pero necesito pasarlo de Mat a PIX porque la encoding de X-Platform.

Intenté esto , esto y esto

Y al hacer la misma función pasando Mat y PIX con la misma imagen, los resultados son muy diferentes (con PIX funciona perfectamente, con Mat se ensucia).

¿Qué estoy haciendo mal probablemente?

Gracias.

PD: (Este es uno de los fragmentos de código que estoy usando)

 String imgToString(const char* variables, Mat gray) { char *outText; tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); if (api->Init(NULL, "eng")) { String returnString = "Could not initialize tesseract.\n"; fprintf(stderr, "Could not initialize tesseract.\n"); return returnString; } api->SetVariable("tessedit_char_whitelist", variables); // Open input image with leptonica library api->TesseractRect(gray.data, 1, gray.channels() * gray.size().width, 0, 0, gray.cols, gray.rows); // Get OCR result outText = api->GetUTF8Text(); return outText; } // The one below works fantastic String imgToString(const char* variables, const char* filename) { char *outText; tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); if (api->Init(NULL, "eng")) { String returnString = "Could not initialize tesseract.\n"; fprintf(stderr, "Could not initialize tesseract.\n"); return returnString; } api->SetVariable("tessedit_char_whitelist", variables); // Open input image with leptonica library Pix *image = pixRead(filename); api->SetImage(image); // Get OCR result outText = api->GetUTF8Text(); return outText; } 

El problema es que parece estar en una imagen gris. Como dice el encabezado pix.h de tesseract, la biblioteca funciona en imágenes con 32 bits por píxel de profundidad. También tesseract pesa los colores, por lo que se debe realizar la alineación correcta de los mismos (opencv en los colores predeterminados almacena los colores como BGR, pero tesseract espera RGBA). Currículum:

 #include  #include  #include  ... char imagename[] = "testimg.jpg"; cv::Mat _mat = cv::imread(imagename); cv::cvtColor(_mat, _mat, CV_BGR2RGBA); api.SetImage(_mat.data, _mat.cols, _mat.rows, 4, 4*_mat.cols); char *outtext = api.GetUTF8Text(); ...