我需要实现一个函数,该函数接收包含图像字节的字符串(通过 boost 套接字连接接收)并将信息转换为OpenCV简历::垫。
我还知道图像的宽度和高度及其大小(以字节为单位)。我的函数如下所示:
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);
}
执行此操作的最佳方法是什么? OpenCV 是否有从字符串中获取 Mat 的构造函数?
最佳答案
OpenCV Mat 有一个来自 vector<byte>
的构造函数,但这不是那么直观。您需要先通过这种方式将字符串转换为向量:
std::vector<byte> vectordata(data.begin(),data.end());
然后您可以从向量创建一个 cv::Mat:
cv::Mat data_mat(vectordata,true);
您还需要对图像进行解码(检查允许使用的类型的文档,png、jpg,具体取决于 OpenCV 版本)
cv::Mat image(cv::imdecode(data_mat,1)); //put 0 if you want greyscale
现在您可以检查生成的图像大小是否与您发送的图像大小相同:
cout<<"Height: " << image.rows <<" Width: "<<image.cols<<endl;
关于string - 将一串字节转换为 cv::mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705578/