2010-11-24 6 views
4

J'ai une image jpeg dans le tampon jpegBuffer. Je suis en train de passer à cv :: fonction imdecode:Comment utiliser cv :: imdecode, si le contenu d'un fichier image se trouve dans un tableau char?

Mat matrixJprg = imdecode(Mat(jpegBuffer), 1); 

Je reçois cette erreur:

/home/richard/Desktop/richard/client/src/main.cc:108: error: no matching function for call to ‘cv::Mat::Mat(char*&)’ 

Voilà comment je remplirai jpegBuffer:

FILE* pFile; 
long lSize; 
char * jpegBuffer; 
pFile = fopen ("img.jpg", "rb"); 
if (pFile == NULL) 
{ 
    exit (1); 
} 

// obtain file size. 
fseek (pFile , 0 , SEEK_END); 
lSize = ftell (pFile); 
rewind (pFile); 

// allocate memory to contain the whole file. 
jpegBuffer = (char*) malloc (lSize); 
if (jpegBuffer == NULL) 
{ 
    exit (2); 
} 

// copy the file into the buffer. 
fread (jpegBuffer, 1, lSize, pFile); 

// terminate 
fclose (pFile); 

Répondre

15

Mat n'a pas constructeur qui prend un argument char *. Essayez ceci:

std::ifstream file("img.jpg"); 
std::vector<char> data; 

file >> std::noskipws; 
std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), std::back_inserter(data)); 

Mat matrixJprg = imdecode(Mat(data), 1); 

EDIT:

Vous devriez aussi jeter un oeil à LoadImageM.

Si vous avez déjà vos données dans un tampon char *, vous pouvez copier les données dans un vecteur std ::.

std::vector<char> data(buf, buf + size); 
+1

Merci beaucoup. Mais que se passe-t-il si j'ai l'image en mémoire tampon (par exemple char * jpegBuffer) en mémoire et qu'elle n'est pas enregistrée en tant que fichier sur le disque? Comment puis-je envoyer le tampon à imdecode alors? Le code ci-dessus est juste un petit test, mais plus tard, je vais juste lire des images jpg de la connexion wifi à la mémoire tampon sans les enregistrer dans des fichiers. –

+0

En général, vous devriez éviter les tampons char * et cela est généralement possible, lorsque vous lisez vos images depuis la connexion wifi, les lisez dans un tampon std :: vector au lieu d'un tampon char *. – ronag

Questions connexes