При получении TCP функция opencv imdecode возвращает ноль из второго поворота в цикле while - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь отобразить поток изображений, используя серию изображений, которые передаются по протоколу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...