diff --git a/openbr/core/eigenutils.cpp b/openbr/core/eigenutils.cpp index 58b46cc..dad3de9 100644 --- a/openbr/core/eigenutils.cpp +++ b/openbr/core/eigenutils.cpp @@ -4,47 +4,6 @@ using namespace Eigen; using namespace cv; -//Helper function to quickly write eigen matrix to disk. Not efficient. -void EigenUtils::writeEigen(MatrixXf X, QString filename) { - Mat m(X.rows(),X.cols(),CV_32FC1); - for (int i = 0; i < X.rows(); i++) { - for (int j = 0; j < X.cols(); j++) { - m.at(i,j) = X(i,j); - } - } - QScopedPointer format(br::Factory::make(filename)); - format->write(br::Template(m)); -} - -void EigenUtils::writeEigen(MatrixXd X, QString filename) { - Mat m(X.rows(),X.cols(),CV_32FC1); - for (int i = 0; i < X.rows(); i++) { - for (int j = 0; j < X.cols(); j++) { - m.at(i,j) = (float)X(i,j); - } - } - QScopedPointer format(br::Factory::make(filename)); - format->write(br::Template(m)); -} - -void EigenUtils::writeEigen(VectorXd X, QString filename) { - Mat m(X.size(),1,CV_32FC1); - for (int i = 0; i < X.rows(); i++) { - m.at(i,0) = (float)X(i); - } - QScopedPointer format(br::Factory::make(filename)); - format->write(br::Template(m)); -} - -void EigenUtils::writeEigen(VectorXf X, QString filename) { - Mat m(X.size(),1,CV_32FC1); - for (int i = 0; i < X.rows(); i++) { - m.at(i,0) = X(i); - } - QScopedPointer format(br::Factory::make(filename)); - format->write(br::Template(m)); -} - void EigenUtils::printSize(Eigen::MatrixXf X) { qDebug() << "Rows=" << X.rows() << "\tCols=" << X.cols(); } diff --git a/openbr/core/eigenutils.h b/openbr/core/eigenutils.h index 427b497..0d6dffc 100644 --- a/openbr/core/eigenutils.h +++ b/openbr/core/eigenutils.h @@ -22,8 +22,11 @@ #include #include +#include #include +#include "openbr/core/qtutils.h" + namespace EigenUtils { template @@ -45,10 +48,21 @@ namespace EigenUtils return result; } - void writeEigen(Eigen::MatrixXf X, QString filename); - void writeEigen(Eigen::MatrixXd X, QString filename); - void writeEigen(Eigen::VectorXd X, QString filename); - void writeEigen(Eigen::VectorXf X, QString filename); + template + void writeMatrix(const Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > &mat, const QString &filename) + { + int r = mat.rows(); + int c = mat.cols(); + + _Scalar *data = new _Scalar[r*c]; + for (int i=0; i