【问题标题】:How to convert opencv mat into string c++如何将opencv mat转换为字符串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

【问题讨论】:

    标签: c++ opencv matrix


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-25
        • 1970-01-01
        • 2013-02-18
        • 2017-06-03
        • 1970-01-01
        • 2021-10-02
        相关资源
        最近更新 更多