2012-08-24 21 views
14

Tengo una matriz de bytes que representa un archivo .jpg que quiero convertir directamente en un objeto Mat de OpenCV.Convertir un byte arry en una imagen OpenCV en C++

que tienen algo así como

byte* data; // Represents a JPG that I don't want to disk and then read. 
// What goes here to end up with the following line? 
cv::Mat* image_representing_the_data; 
+0

Por lo que significa de datos es el byte-corriente comprimida de un archivo JPG ¿archivo de imagen? –

+0

¿Has probado cv :: Mat image_representing_the_data (dataSize, 1, CV_8U, data); (y luego remodelar la imagen)? – Sassa

Respuesta

11

como @bob mención, esto se puede hacer mediante el constructor Mat.

byte *data; 
cv::Mat imageWithData = cv::Mat(sizeOfData, 1, CV_8U, data).clone(); 

Después de haber creado esta matriz, llamar a la función reshape con el número de filas de la imagen.

Mat reshapedImage = imageWithData.reshape(0, numberOfRows); 
18

el método mencionado anteriormente funcionará bien, si se trata de datos PIXEL.

si, en cambio, tiene un ARCHIVO jpg completo en memoria, encabezados, compresión y todo, no funcionará.

en ese caso que desee:

Mat img = imdecode(data); 

que hacer lo mismo que imread(), sólo desde la memoria, y no de un nombre de archivo