Ok. C'est un peu étrange. Longue histoire courte. Je suis en train de créer des images BGR brutes à partir d'une caméra, en les compressant en JPG avec OpenCV et en les envoyant avec un protocole UDP sur un PC. Voici comment compresser les images:L'image BGR brute après la compression JPG est la même longueur?
// memblock contains raw image
IplImage* fIplImageHeader;
fIplImageHeader = cvCreateImageHeader(cvSize(160, 120), 8, 3);
fIplImageHeader->imageData = (char*) memblock;
// compress to JPG
vector<int> p;
p.push_back(CV_IMWRITE_JPEG_QUALITY);
p.push_back(75);
vector<unsigned char> buf;
cv::imencode(".jpg", fIplImageHeader, buf, p);
Voici comment je les envoie avec UDP:
n_sent = sendto(sk,&*buf.begin(),(int)size,0,(struct sockaddr*) &server,sizeof(server));
Voici comment je les reçois dans un PC:
int iRcvdBytes=recvfrom(iSockFd,buff,bufferSize,0,
(struct sockaddr*)&cliAddr,(socklen_t*)&cliAddrLen);
// print how many bytes we have received
cout<<"Received "<<iRcvdBytes<<" bytes from the client"<<endl;
Je reçois cette sortie:
Received 57600 bytes from the client
Received 57600 bytes from the client
...
Si je supprime le JP G compression au programme pour récupérer les images de la caméra, la sortie est le même:
Received 57600 bytes from the client
Received 57600 bytes from the client
...
Cependant, lorsque j'enregistre l'image reçue sur un disque, sa taille est d'environ 7.8KB en image brute non compressé enregistré sur le disque prend environ 57 Ko d'espace.
Que se passe-t-il ici?
Oh, c'est vrai. la taille contient la taille de l'image brute. Par ailleurs, comment puis-je trouver la taille du vecteur buf? –
Utilisez simplement buf.size() :) –