2016-10-25 12 views
0

Ich möchte Magick ++ mit Tesseract OCR kombinieren. Ich konnte nicht Magick senden ++Mit Magick ++ mit Tesseract

Bild

Objekt Tesseract

setImage (const uchar *, int width, int height, int byte_per_pixel, int byte_per_line);

Methode. Es hat keine byte_per_line Informationen.

Danke für jede Hilfe.

Edit: mit Hilfe von Emcconville habe ich meinen Code organisiert und es scheint zu funktionieren.

Magick::Image* imgptr = mat2Image(frame); // cv::Mat 
Geometry size = imgptr->size(); 
imgptr->density(Geometry(300,300)); 

size_t area = frame.rows * frame.cols; 
uchar* data = new uchar[3 * CharPixel * area]; 

imgptr->write(0,0,frame.cols,frame.rows, "BGR",CharPixel,data); 
api- >SetImage(data,size.width(),size.height(),3*CharPixel,3*CharPixel*size.width()); 

delete [] data; 
delete imgptr; 
+0

Bitte liefern Sie [mcve], im Moment ist es nicht genug Informationen, um Ihnen zu helfen. – Nikita

+1

Kurzinfo: 'CharPixel' ist ein Datentyp. Um die Größe zu berechnen, wäre 'sizeof (unsigned char)'. Also '3 * sizeof (unsigned char)' – emcconville

Antwort

2

Magick ++ verfügt über eine Datenexportmethode ...

Magick::Image.write(const ssize_t x_, 
        const ssize_t y_, 
        const size_t columns_, 
        const size_t rows_, 
        const std::string &map_, 
        const StorageType type_, void *pixels_) 

Bevor Daten exportieren, müssen Sie bestimmen, welche Farbkanäle im &map_ Argument (zB "RGBA"), und die Größe von jedem Farbkanal type_ (zB CharPixel). Sie sind dann verantwortlich für die Zuweisung eines Puffers pixels_ groß genug, um alle Daten (Anzahl der Kanäle * Größe des Speichertyps * Bildbereich) zu halten.

Nach dem Export sollten Sie in der Lage sein, den Puffer zu TessBaseAPI::SetImage mit byte_per_pixel wobei die Anzahl der Kanäle * Speichertyp Größe zu passieren, und in der Regel byte_per_linebyte_per_pixel * Breite der Fläche.