Беглый взгляд на документацию для Mat
класса не обнаруживает очевидного оператора 'convert to float**
', но вы, вероятно, могли бы сделать это вручную:
Mat mat = (Mat_<float>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
// allocate and initialize a 2d float array
float **m = new float*[mat.Rows];
for (int r = 0; r < mat.Rows; ++r)
{
m[r] = new float[mat.Cols];
for (int c = 0; c < mat.Cols; ++c)
{
m[r][c] = mat.at(r, c);
}
}
// (use m for something)
// don't forget to clean up!
for (int r = 0; r < mat.Rows; ++r)
{
delete[] m[r];
}
delete[] m;
Если вы не настроены на использование float**
, вы можете использовать std::vector
или boost::multi_array
, чтобы избежать неуклюжего выделения / освобождения памяти и уменьшитьвероятность утечек.
Возможно, вам также повезет, если использовать Mat::ptr<float>(n)
, чтобы получить float*
в n
-ую строку матрицы, но если вы не скопируете данные, яЯ не уверен, что у вас есть гарантии относительно того, как долго этот указатель будет оставаться действительным.