如何将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&amp; operator &lt;&lt; (String&amp; out, const Mat&amp; 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 ++的主要内容,如果未能解决你的问题,请参考以下文章

opencv编程中cvMat到Mat如何进行数据转换?

如何将 Mat 数据(OpenCV,图像数据格式)转换为统一的 3d 纹理

arduino 中如何将字符串型转换为float型?

如何将字符串转换为整型数?

如何将特定字符从字符串转换为int(C)

如何将表列转换为数组?