如何将varbinary数据(作为字符串)转换为字节数组?

时间:2017-02-08 08:07:19

标签: c++ image opencv blob

我有一个varbinary(BLOB)数据作为字符串(图像数据)

例如,

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

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

我得到错误,

  
    

OpenCV错误:cv :: imshow中的断言失败(size.width> 0& size.height> 0),>>文件........ \ 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格式。有什么建议吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

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