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