Может кто-нибудь увидеть, что я делаю неправильно opencv не будет декодировать JPEG из буфера std :: string, но сохранит строковый буфер в файл JPG хорошо - PullRequest
0 голосов
/ 10 марта 2020

Вот мой код std :: str - буфер, содержащий данные изображения jpeg. проблема в том, что img не имеет значения при декодировании и не выдает исключений.

unsigned char* p = (unsigned char*)(&str[0]);// convert std::string str to unsigned char*
            cv::Mat img;
            try
            {
                img = cv::imdecode(cv::Mat(1, str.length(), CV_8UC1, p), IMREAD_UNCHANGED);
            }
            catch (cv::Exception& e)
            {
                const char* err_msg = e.what();
                TRACE(L"exception caught: %S", err_msg);
            }
            //save jpeg file image save fine from buffer p
            std::fstream file;
            file.open("image.jpg", std::ios::out | std::ios::binary);
            file.write((char *)p, str.length());
            file.close();

1 Ответ

0 голосов
/ 10 марта 2020

Я нашел проблему. Код, который я разместил, был правильным и прекрасно работает, ошибка была в информации заголовка буфера jpeg. Я не удалил последние четыре символа "\ r \ n \ r \ n" из ответа заголовка HTTP GET, который возвращал данные файла jpg с сервера. Кажется, Opencv очень чувствителен, когда std :: fstream не был замечен, чтобы быть затронутым дополнительными 4 символами, поэтому я был смущен. К сведению, код работает: cv :: Mat img делает что-то, что содержит данные, возвращенные из cv :: imdecode (..), который является расшифрованными данными jpg.

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