我需要实现一个接收包含图像字节的字符串的函数(通过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)
| 归档时间: |
|
| 查看次数: |
10742 次 |
| 最近记录: |