Преобразование между cv::Mat и arma::mat

Я использую OpenCV, а также хочу добавить несколько классных функций из mlpack, который использует матрицы Armadillo.

Есть ли простой способ между cv::Mat и arms::mat?

Спасибо!

1 ответ

Решение

OpenCV-х Mat имеет указатель на свои данные. У броненосца есть конструктор, который способен читать из внешних данных. Их легко собрать. Помните, что Armadillo хранит в мажорном порядке, тогда как OpenCV использует мажорный ряд. Я полагаю, вам нужно добавить еще один шаг для преобразования, до или после.

cv::Mat opencv_mat;    //opencv's mat, already transposed.
arma::mat arma_mat( reinterpret_cast<double*>opencv_mat.data, opencv_mat.rows, opencv_mat.cols )

cv::Mat конструктор имеет форму, которая принимает указатель на данные, и arma::mat имеет функцию для двойного * указателя на свои данные, называемую memptr().

Итак, если вы хотите конвертировать из arma::mat в cv::Mat, это должно работать:

cv::Mat opencv_mat( rows, cols, CV_64FC1, arma_mat.memptr() )
Другие вопросы по тегам