C++ 有人能看到我做错了什么吗opencv不会从std::string buffer解码jpeg,但会将string buffer保存到jpg文件ok

C++ 有人能看到我做错了什么吗opencv不会从std::string buffer解码jpeg,但会将string buffer保存到jpg文件ok,c++,opencv,C++,Opencv,这是我的代码std::str是包含jpeg图像数据的缓冲区。问题是img is在解码时没有值,并且不会抛出异常 unsigned char* p = (unsigned char*)(&str[0]);// convert std::string str to unsigned char* cv::Mat img; try { img = cv::imdecode(cv::Mat(1,

这是我的代码std::str是包含jpeg图像数据的缓冲区。问题是img is在解码时没有值,并且不会抛出异常

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();

我发现了问题。我张贴的代码是正确的,工作完美的错误是在头信息的jpeg缓冲区。我没有从从服务器返回jpg文件数据的HTTP GET头响应中去掉最后四个字符“\r\n\r\n”。似乎Opencv非常敏感,因为std::fstream没有被额外的4个字符影响,这就是为什么我感到困惑的原因。仅供参考,当代码运行时,cv::Mat img正在做一些事情,它保存从cv::imdecode(..)返回的数据,这是解密的jpg数据

您知道
std::string
有一个
c_str()
-member函数吗?请小心标记。用C标记吸引更多的眼睛,但不是所有的额外眼睛都对调试C++代码感兴趣。代码从不与<代码> IMG无关。我知道STD::String有一个CXString(),但是即使使用这个,我仍然有同样的问题。cv::Mat img从cv::imdecode接收信息,但我的jpeg流似乎是从缓冲的jpeg流中解码的,但它将很好地保存为jpeg文件。