Как конвертировать opencv mat в строку c ++ - PullRequest
1 голос
/ 17 апреля 2020
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

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы также можете получить доступ к каждому элементу 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;

}
1 голос
/ 17 апреля 2020

Используйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...