Хорошо.Это немного странно.Короче.Я получаю сырые изображения BGR с камеры, сжимаю их в JPG с OpenCV и отправляю по протоколу UDP на ПК.Вот как я сжимаю изображения:
// 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);
Вот как я отправляю их по UDP:
n_sent = sendto(sk,&*buf.begin(),(int)size,0,(struct sockaddr*) &server,sizeof(server));
Вот как я получаю их на ПК:
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;
Я получаю этот вывод:
Received 57600 bytes from the client
Received 57600 bytes from the client
...
Если я удаляю сжатие JPG в программе, извлекающей изображения с камеры, вывод такой же:
Received 57600 bytes from the client
Received 57600 bytes from the client
...
Однако когдаЯ сохраняю полученное изображение на диске, его размер составляет около 7,8 КБ, в то время как несжатое необработанное изображение, сохраненное на диске, занимает около 57 КБ.
Что здесь происходит?