Armadillo与opencv库之间调用

来源:互联网 发布:如何关闭139端口 编辑:程序博客网 时间:2024/06/17 02:17

Armadillo是目前使用比较广的C++矩阵运算库之一,是在C++下使用Matlab方式操作矩阵很好的选择。OpenCV在计算机视觉领域中地位不必多说,opencv自带的矩阵计算功能算不上是专业的矩阵计算库。现在的问题是,在同一个项目里同时使用两个库,它们的类型转换该怎么办?

static void Cv_mat_to_arma_mat(const cv::Mat& cv_mat_in, arma::mat& arma_mat_out)
{//convert unsigned int cv::Mat to arma::Mat<double>
for(int r=0;r<cv_mat_in.rows;r++){
for(int c=0;c<cv_mat_in.cols;c++){
arma_mat_out(r,c)=cv_mat_in.data[r*cv_mat_in.cols+c]/255.0;
}
}
};
template<typename T>
static void Arma_mat_to_cv_mat(const arma::Mat<T>& arma_mat_in,cv::Mat_<T>& cv_mat_out)
{
cv::transpose(cv::Mat_<T>(static_cast<int>(arma_mat_in.n_cols),
static_cast<int>(arma_mat_in.n_rows),
const_cast<T*>(arma_mat_in.memptr())),
cv_mat_out);
};

调用

一定要初始化arma::mat!!!

//convert cv::Mat to arma::matarma::mat img(cvImg.rows,cvImg.cols);//cvImg is a cv::MatCv_mat_to_arma_mat(cvImg,img);
//convert arma::mat to cv::Matcv::Mat_<double> cv_img;Arma_mat_to_cv_mat<double>(arma_img,cv_img);
原创粉丝点击