Я пытаюсь отобразить поток изображений, используя серию изображений, которые передаются по протоколу TCP. На стороне отправителя несколько файлов изображений jpg кодируются в виде двоичных файлов с использованием «imencode» и передаются последовательно. На стороне получателя полученные данные декодируются и сохраняются в переменной cv :: Mat с использованием 'imdecode' через некоторое время. L oop.
Первые принятые данные правильно декодируются и сохраняются в cv: : Переменная Mat, но вторые полученные данные неправильно декодируются. Функция 'imdecode' в настоящее время возвращает ноль, и все данные равны NULL.
Как я могу непрерывно декодировать двоичные данные в течение некоторого времени l oop
Ниже приведена часть мой код
while (1) {
cv::Mat img_rcv;
std::vector<char> buffer;
char recvbuf[FULL_BUFLEN];
size_t len = sizeof(recvbuf);
char *p = recvbuf;
dataReceived = 0;
/////////* receiving data *////////
while (len > 0 && (dataReceived = recv(ConnectSocket, p, len, 0)) > 0) {
p += dataReceived;
len = len - (size_t)dataReceived;
if (len > 0 || dataReceived < 0) {
continue;
}
}
buffer.assign(recvbuf, recvbuf + sizeof(recvbuf));
img_rcv = cv::imdecode(buffer, 1);
// Display the resulting frame
cv::imshow("received Image", img_rcv);
...
}
'img_rcv' в первом l oop сгенерирован правильно, поэтому я могу видеть изображение с помощью cv :: imshow, но img_rcv возвращает ноль из второй л oop. Я проверил 'recvbuf' обновляется во втором l oop.