如何将opencv mat转换为字符串c ++
Posted
技术标签:
【中文标题】如何将opencv mat转换为字符串c ++【英文标题】:How to convert opencv mat into string c++ 【发布时间】:2020-04-17 04:03:41 【问题描述】:float matrix_data[] = 0.9867, 0.02454, -0.1603,
0.01921, 0.9638, 0.2657,
0.16112, -0.2652, 0.9506;
cv::Mat res_mat = cv::Mat(3,3,CV_32F,matrix_data);
cout << "res_mat :" << res_mat<<endl;
我知道我可以通过这个看到垫子的输出,但我想将此垫子添加到字符串中,如下所示:
std::string my_str = "my mat :";
my_str += to_String(res_mat);
所以想要的结果是这样的:
my mat : 0.9867, 0.02454, -0.1603, 0.01921, 0.9638, 0.2657,0.16112, -0.2652, 0.9506
【问题讨论】:
【参考方案1】:使用std::ostringstream
。在此之前,为您的矩阵创建新标题以将其视为向量:
cv::Mat oneRow = res_mat.reshape(0,1); // Treat as vector
std::ostringstream os;
os << oneRow; // Put to the stream
std::string asStr = os.str(); // Get string
asStr.pop_back(); // Remove brackets
asStr.erase(0,1);
cout << "res_mat :" << asStr <<endl;
【讨论】:
【参考方案2】:您还可以访问Mat
的每个元素并将这些元素添加到string
类型。这个也可以用。
代码如下:
#include <opencv2/opencv.hpp>
#include <string>
using namespace cv;
using namespace std;
int main()
float matrix_data[] = 0.9867, 0.02454, -0.1603,
0.01921, 0.9638, 0.2657,
0.16112, -0.2652, 0.9506;
cv::Mat res_mat = cv::Mat(3,3,CV_32F,matrix_data);
cout << "res_mat :" << res_mat<<endl;
std::string my_str = "my mat :";
for(int i=0; i<res_mat.rows; i++)
for(int j=0; j<res_mat.cols; j++)
my_str += to_string(res_mat.at<float>(i,j)) + ", ";
cout<<my_str<<endl;
【讨论】:
完美,这就是我想要的【参考方案3】:您可以使用String& operator << (String& out, const Mat& mtx)
获取字符串表示形式
float matrix_data[] = 0.9867, 0.02454, -0.1603,
0.01921, 0.9638, 0.2657,
0.16112, -0.2652, 0.9506;
cv::Mat res_mat = cv::Mat(3, 3, CV_32F, matrix_data);
std::string my_str = "my mat :";
my_str << res_mat; // ← it's that simple
【讨论】:
以上是关于如何将opencv mat转换为字符串c ++的主要内容,如果未能解决你的问题,请参考以下文章