如何将变量二进制数据(作为字符串)转换为字节数组

How to convert varbinary data (as string) to byte array?

本文关键字:字符串 转换 字节 数组 字节数 变量 二进制 数据      更新时间:2023-10-16

我有一个变量(BLOB(数据作为字符串(图像数据(

例如

std::string ByteStr = "FF-D8-E0-FF-85 ... " ;

我想将此字符串转换为字节数组(或有用的东西(,然后用作cv::Mat格式。 我从另一个方法获取字符串。我试图转换,但我得到OpenCV错误。

我得到的错误,

OpenCV 错误:断言失败 (size.width>0 && size.height>0( in cv::imshow,>>file ........\opencv\modules\highgui\src\window.cpp

C++代码,

std::string ByteStr = obj->GetBinaryStr();  // this provide varbinary string
std::vector<uchar> vct;
std::string delimiter = "-";
        size_t pos = 0;
        std::string token;
        while ((pos = ByteStr.find(delimiter)) != std::string::npos) {
            token = ByteStr.substr(0, pos);
            vct.push_back((uchar)(token.c_str()));
            ByteStr.erase(0, pos + delimiter.length());
        }          
       cv::Mat img = cv::imdecode(vct,CV_BGR2GRAY );
       cv::namedWindow("MyWindow");
       cv::imshow("MyWindow",img);

如何将此字符串转换为cv::Mat格式。有什么建议吗?

提前致谢

cv::imdecode(vct,CV_BGR2GRAY );没有任何

意义。请使用有意义的内容,例如 cv::imdecode(vct, cv2.IMREAD_GRAYSCALE ); .

此外,还需要将十六进制字符串转换为整数类型。你可以为此使用 strtol。

代码变为类似以下内容:

std::string ByteStr = obj->GetBinaryStr();  // this provide varbinary string
std::vector<uchar> vct;
std::string delimiter = "-";
size_t pos = 0;
std::string token;
while ((pos = ByteStr.find(delimiter)) != std::string::npos) {
    token = ByteStr.substr(0, pos); 
    uchar ucharToken = uchar(strtol(token.c_str(), NULL, 16));
    vct.push_back(ucharToken);
    ByteStr.erase(0, pos + delimiter.length());
}          
cv::Mat img = cv::imdecode(vct, cv::IMREAD_GRAYSCALE);
cv::namedWindow("MyWindow");
cv::imshow("MyWindow",img);