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::mat
arma::mat img(cvImg.rows,cvImg.cols);//cvImg is a cv::Mat
Cv_mat_to_arma_mat(cvImg,img);
//convert arma::mat to cv::Mat
cv::Mat_<double> cv_img;
Arma_mat_to_cv_mat<double>(arma_img,cv_img);
本文介绍如何在C++项目中实现Armadillo库与OpenCV库之间的矩阵类型转换。Armadillo是一个强大的C++矩阵库,而OpenCV则广泛应用于计算机视觉领域。文中提供了具体的转换函数实现,并强调了初始化的重要性。
1038

被折叠的 条评论
为什么被折叠?



