C++中OpenCV、Armadillo矩阵数据格式的转换方式.docxVIP

C++中OpenCV、Armadillo矩阵数据格式的转换方式.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

C++中OpenCV、Armadillo矩阵数据格式的转换方式

本文介绍在C++语言中,矩阵库Armadillo的mat、vec格式数据与计算机视觉库OpenCV的Mat格式数据相互转换的方法。

在C++语言的矩阵库Armadillo与计算机视觉库OpenCV中,都有矩阵格式的数据类型;而这两个库在运行能力方面各有千秋,因此实际应用过程中,难免会遇到需要将二者的矩阵格式数据类型加以相互转换的情况。本文就对其相互转换的具体方法加以介绍。

首先,二者相互转换需要用到的代码如下。

#includeiostream

#includearmadillo

#includeopencv2/opencv.hpp

usingnamespacestd;

intmAIn(){

//将Armadillo的列向量vec转为OpenCV的Mat

arma::vecar_vec={1,2,3,4};

coutar_vec\nendl;

cv::Matcv_mat_1(ar_vec.n_rows,ar_vec.n_cols,CV_64FC1,ar_vec.memptr());

coutcv_mat_1\nendl;

//将Armadillo的mat转为OpenCV的Mat

arma::matar_mat={{1,2,3},{5,6,7}};

coutar_mat\nendl;

arma::matar_mat_t=ar_mat.t();

cv::Matcv_mat_2(ar_mat.n_rows,ar_mat.n_cols,CV_64FC1,ar_mat_t.memptr());

coutcv_mat_2\nendl;

//将OpenCV的Mat转为Armadillo的mat

cv::Matcv_mat=(cv::Mat_double(2,3)1,8,9,15,22,37);

coutcv_mat\nendl;

arma::matar_mat_1_t(reinterpret_castdouble*(cv_mat.data),cv_mat.cols,cv_mat.rows);

coutar_mat_1_t\nendl;

arma::matar_mat_1=ar_mat_1_t.t();

coutar_mat_1\nendl;

//将OpenCV的Mat转为Armadillo的列向量vec或行向量rowvec

cv::Matcv_mat_3=(cv::Mat_double(1,4)1,3,7,15);

coutcv_mat_3\nendl;

arma::vecar_vec_1_t(reinterpret_castdouble*(cv_mat_3.data),cv_mat_3.cols,cv_mat_3.rows);

coutar_vec_1_t\nendl;

arma::rowvecar_vec_1=ar_vec_1_t.t();

coutar_vec_1\nendl;

return0;

其中,主函数中共有4个部分,分别是将Armadillo的列向量vec转为OpenCV的Mat、将Armadillo的mat转为OpenCV的Mat、将OpenCV的Mat转为Armadillo的mat、将OpenCV的Mat转为Armadillo的列向量vec或行向量rowvec等4个过程的代码。

转换的整体思路也非常简单。如果我们需要将Armadillo库的矩阵数据转换为OpenCV库的矩阵数据,那么就通过cv::Mat格式数据的构造函数,基于.memptr()函数将Armadillo库的矩阵数据元素分别提取出,放入OpenCV库的矩阵数据即可;反之,如果需要将OpenCV库的矩阵数据转换为Armadillo库的矩阵数据,则基于arma::mat格式数据的构造函数来实现即可。

有一点需要注意的是,Armadillo库是以列优先的方式存储矩阵数据,而OpenCV库则是以行优先的方式存储矩阵数据;因此在上述二者相互转换的代码中,我们有时需要对转换的矩阵数据做一次转置操作,从而保证数据转换无误。

为了方便对比,我们将上述代码运行所得结果加以展示;如下图所示。

可以看到,上述三段代码可以成功地将Armadillo库、OpenCV

文档评论(0)

159****6192 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档