将字符串转换为cv :: mat

Mar*_*mos 7 string opencv mat

我需要实现一个接收包含图像字节的字符串的函数(通过boost socket连接接收)并将信息转换为OpenCV cv :: Mat.

我也知道图像的宽度和高度及其大小(以字节为单位).我的功能看起来像这样:

void createImageFromBytes(const std::string& name, std::pair<int,int> dimensions, const std::string& data)
{
   int width,height;
   width = dimensions.first;
   height = dimensions.second;
   //convert data to cv::Mat image

   std::string filepng = DATA_PATH"/" + name +".png";
   imwrite(filepng, image);
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?OpenCV是否有来自字符串Mat的构造函数?

Jav*_*ock 13

OpenCV Mat有一个构造函数vector<byte>,但这不是那么直观.首先需要以这种方式从字符串转换为向量:

std::vector<byte> vectordata(data.begin(),data.end());
Run Code Online (Sandbox Code Playgroud)

然后你可以从vector创建一个cv :: Mat:

cv::Mat data_mat(vectordata,true);
Run Code Online (Sandbox Code Playgroud)

您还需要解码图像(检查文档中允许的类型,png,jpg,具体取决于OpenCV版本)

cv::Mat image(cv::imdecode(data_mat,1)); //put 0 if you want greyscale
Run Code Online (Sandbox Code Playgroud)

现在,您可以检查图像的最终大小是否与您发送的大小相同:

cout<<"Height: " << image.rows <<" Width: "<<image.cols<<endl;
Run Code Online (Sandbox Code Playgroud)